Windows Phone-如何解析音频的字节流

Windows Phone-如何解析音频的字节流

夜无邪 发布于 2017-03-26 字数 2392 浏览 1046 回复 1

我已经通过Windows Phone 的 Microphone录制了一段时间的音频,数据是byte[]类型。现在我想要知道麦克风有无声音。由于库中没有提供直接的方法,所有我想能不能通过分析byte数组来得到音频的具体信息,如高峰区,音量等。

后面我还想对这个数据进行降噪处理,识别出最明显的声音,关键现在对数据的内容一无所知。

观察了byte中的数据,几乎没有规律,不知道有没有熟悉音频的朋友能够帮忙回答一下?

下面是录音的一个Samplecode

 public partial class MainPage : PhoneApplicationPage
{
Microphone microphone = Microphone.Default;
byte[] buffer;
MemoryStream stream = new MemoryStream();
SoundEffect sound;

// Constructor
public MainPage()
{
InitializeComponent();
DispatcherTimer dt = new DispatcherTimer();
dt.Interval = TimeSpan.FromMilliseconds(33);
dt.Tick += delegate { try { FrameworkDispatcher.Update(); } catch { } };
dt.Start();

microphone.BufferReady += new EventHandler<EventArgs>(microphone_BufferReady);

}

//写数据
void microphone_BufferReady(object sender, EventArgs e)
{
microphone.GetData(buffer);
stream.Write(buffer, 0, buffer.Length);
//throw new NotImplementedException();

}

//录音
private void recordButton_Click(object sender, RoutedEventArgs e)
{
microphone.BufferDuration = TimeSpan.FromMilliseconds(1000);
buffer = new byte[microphone.GetSampleSizeInBytes(microphone.BufferDuration)];
microphone.Start();
}

//停止
private void stopButton_Click(object sender, RoutedEventArgs e)
{
if (microphone.State == MicrophoneState.Started)
{
microphone.Stop();
}
}

//播放
private void playButton_Click(object sender, RoutedEventArgs e)
{
sound = new SoundEffect(stream.ToArray(), microphone.SampleRate, AudioChannels.Mono);
Debug.WriteLine(sound.Duration.ToString());
sound.Play();
}
}

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

晚风撩人 2017-10-18 1 楼

Windows Phone我也没有接触过,不知道具体的音频流是什么格式,不过99%是PCM Wave吧。两个字节合在一起表示一个short,小端格式。如果是立体声的话,左右间隔,第一个是左,第二个是右,第三个是左,依此类推;单声道的话就是连续的数据就行了。
可以用BitConverter把连续的字节转成short。