从Windows Phone 7到应用程序引擎的声音数据字节数组



我试图从Windows Phone 7发布一个字节的声音数据到一个应用程序引擎Java servlet。在途中的某个地方,数据搞砸了,当我试图播放音频时,它不起作用。下面是一些代码:

WP7:

public static void SendEmail(byte[] data, String to, String subject, String filename)
    {
        //WebClient wc = new WebClient();
        //wc.Headers[HttpRequestHeader.ContentType] = "application/binary";
        String url = "http://someserver/test?to=" + to + "&subject=" + subject + "&filename=" + filename;
        //wc.OpenReadAsync(new Uri(url), "POST");
        var webClient = new WebClient();
        webClient.OpenWriteAsync(new Uri(url), "POST", data);
        webClient.OpenWriteCompleted += new OpenWriteCompletedEventHandler(webClient_OpenWriteCompleted);
    }
    static void webClient_OpenWriteCompleted(object sender, OpenWriteCompletedEventArgs e)
    {
        object[] objArr = e.UserState as object[];
        byte[] fileContent = e.UserState as byte[];
        Stream outputStream = e.Result;
        outputStream.Write(fileContent, 0, fileContent.Length);
        outputStream.Flush();
        outputStream.Close();
    }

App Engine Servlet:

InputStream in = req.getInputStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int next = in.read();
while (next > -1) {
  bos.write(next);
  next = in.read();
}       
bos.flush();
attachmentData = bos.toByteArray();

Wp7音频码:

microphone.GetData(buffer);
stream.Write(buffer, 0, buffer.Length);
//then I save the stream.toArray() to an object and use it later for playback on the   phone
创建音频的Java代码(音频作为电子邮件的附件发送):
MimeBodyPart attachmentPart = new MimeBodyPart();
        attachmentPart.setFileName(filename + ".wav");
        attachmentPart.setDisposition(Part.ATTACHMENT);
        DataSource src = new ByteArrayDataSource(attachmentData, "audio/x-wav");
        DataHandler handler = new DataHandler(src);
        attachmentPart.setDataHandler(handler);
        mp.addBodyPart(attachmentPart);

您需要注意您的端序。我真的不太了解谷歌应用引擎,但我猜你的servlet是Java代码和Windows Phone 7代码是c# ?由于您正在应用引擎servlet上读取整数(4字节),并在WP7端写入字节,我的第一个猜测是您正在以一个端序写入字节并以另一个端序读取字节。如果是这种情况,当你在WP7端写入字节时,你要么必须改变端序(WP7有BitConverter类吗?),要么在另一边"切换"字节以确保正确的端序。

还有,澄清一下,你说的"不工作"是什么意思?它播放的音频是乱码吗?还是沉默?等。

调试端序的一个步骤是在WP7端写入一个整数(以字节的形式),然后在App Engine端读取该整数。是同一个整数吗?如果不是,则存在端序问题。

是否将wave头文件添加到文件中?来自麦克风的原始字节本身不是波文件。您需要添加适当的RIFF报头,其中包含通道数、每个采样字节数、采样率、编码和其他一些位的信息。我在CodeProject.com上发表了一篇文章,其中包含您需要的代码。在录音机里。也请查看评论区域,因为那里有一个流媒体记录器的参考。

最新更新