windows-phone-7 - 如何将音频从麦克风传输到扬声器?

标签 windows-phone-7 audio windows-phone-8 windows-phone microphone

我希望将音频直接从麦克风流式传输到默认音频输出介质,无论是扬声器还是 3.5 毫米插孔。

我发现的播放音频的机制似乎取决于提供在 SoundEffect 中播放的静态字节数,如下所示:

SoundEffect sound = new SoundEffect(stream.ToArray(), microphone.SampleRate, AudioChannels.Mono);
soundInstance = sound.CreateInstance();
soundIsPlaying = true;
soundInstance.Play();

我可以连续播放 500 毫秒或更短的 SoundEffects 来实现我的目标,但我想知道是否有一种更复杂的方法,其中涉及麦克风不断写入 MemoryStream,音频播放控件可以连续读取该内存流。

感谢您的帮助!

最佳答案

我通过使用麦克风向 MediaElement Player 提供样本的类扩展 MediaStreamSource 类来解决此问题。

如果对这段代码有任何需求,我会很乐意将其发布到某个地方。现在,如果您尝试做同样的事情,这里有一个代码片段可以帮助您:

// Provides audio samples from AudioSampleProvider property.
//  (MediaStreamType parameter will always equal Audio.)
protected override void GetSampleAsync(MediaStreamType mediaStreamType)
{
    // start the microphone capture if it's not started yet
    if (microphone.State == MicrophoneState.Stopped)
    {
        microphone.Start();
    }
}

// gets called back when the microphone's buffer is ready
private void microphone_BufferReady(object sender, EventArgs e)
{
    // Retrieve audio data
    microphone.GetData(buffer);

    // Reset MemoryStream object
    memoryStream.Seek(0, SeekOrigin.Begin);

    // Write the newly acquired data into the memory stream
    memoryStream.Write(buffer, 0, buffer.Length);

    // Send out the sample
    ReportGetSampleCompleted(new MediaStreamSample(mediaStreamDescription,
                                                    memoryStream,
                                                    0,
                                                    buffer.Length,
                                                    0, 
                                                    mediaSampleAttributes));
}

您基本上只是在返回麦克风缓冲区时报告样本已准备好。这样可以实现流畅的播放。

关于windows-phone-7 - 如何将音频从麦克风传输到扬声器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14405771/

相关文章:

silverlight - 使图像控件根据主题反转其颜色

silverlight - Windows 手机 7 : List of api-features

java - 白噪声混合2音频字节数组

c# - 将字节数组写入Windows Phone中的存储文件

cordova - 如何查看 Windows Phone 8 模拟器或运行 Phonegap 应用程序的设备的 javascript 控制台输出

windows-phone-7 - 如何自定义 wp7 工具包 ToggleSwitch

windows-phone-7 - 如何在 wp7 中获得 ScrollView 的最大偏移量?

asp.net - 可换肤的音频播放器(或类似于任务栏中的Windows Vista音频控件的东西)-适用于Web

android - 如何在我的Android应用程序中添加音频消息?

c# - Windows Phone 8 - Geolocator PositionChanged 监听器在一段时间后死亡