音频基础之麦克风功放扬声器

Posted zhui-meng6

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了音频基础之麦克风功放扬声器相关的知识,希望对你有一定的参考价值。

一、功放(电信号放大)技术指标
1、输出功率
单位为W,各厂家测量方法不一,以致不同名目叫法。如额定输出功率,最大输出功率,音乐输出功率,峰值音乐输出功率。
音乐功率:是指输出失真度不超过规定值的条件下,功放对音乐信号的瞬间最大输出功率。
峰值功率:不失真条件下,将功率音量调至最大时,功放所能输出的最大音乐功率。
额定输出功率:当谐波失真度为10%时的平均输出功率
2、频率响应
表示功放的频率范围和频率范围内的不均匀度。频率曲线的平直与否一般用分贝(db)表示。家用HIFI频响一般为20HZ-20KHZ正负1db.
3、失真度
功放将输入信号放大后,再输出产生不同程度畸变,用%比表示,数值越小越好。功放失真有谐波失真、互调失真、交叉失真、消波失真、瞬态失真、瞬态互调失真等
4、信噪比
功放输出的信号电平与噪声电平之比,用db表示,这个数值越大越好。
5、输出阻抗
对扬声器所呈现的等效内阻,称做输出阻抗。
6、阻尼系数
指放大器的额定负载(扬声器)阻抗与功率放大器实际阻抗的比值,阻尼系数KD定义为:KD=功放额定输出阻抗(等于音箱额定阻抗)/功放输出内阻。家用高保真功放阻尼系数有一个经验值可供参考,最低要求:晶体管功放KD值大于或等于40,电子管功放KD值大于或等于6.
二、麦克风(声信号转电信号)技术指标
1、灵敏度
麦克风灵敏度是指在94dB声压级条件下,使用1kHZ频率进行测量时,麦克风的开路输出电压幅度的大小。灵敏度是表征麦克风声电转换能力的一个指标,越高代表输出信号越大,声音也越大。模拟麦克风的灵敏度通常表示为相对于1V有效值信号的分贝数,而数字麦克风的灵敏度通常表示为相对于麦克风全量程输出的分贝数。如常见模拟麦克风的灵敏度为-38dBV、-42dBV,数字麦克风的灵敏度为-26dBFS 等。
2、频率响应
麦克风灵敏度随频率变化的特征称着麦克风的频率响应特征,也称频响曲线。麦克风在接受到不同频率声音时,输出信号的幅度会随着频率的变化而发生增大或减小。

3、信噪比
指麦克风的灵敏度与固有噪声的比值,单位为dB(A)。信噪比越高的麦克风,则其拾取声音的清晰度越高,在智能家居产品上,如有远距离的拾音需求,应尽量选择高信噪比的麦克风,目前硅麦克风的信噪比通常在58dB~70dB之间。
3、总谐波失真(THD)
由谐波失真产生输出信号的有效值与总输出信号的有效值之比。是麦克风拾音精确度的指标,通常在94~100dB SPL声压范围内测量,表示在正常声压级条件下声音信号的品质。THD越低,声音质量越好。
4、最大声压级
在麦克风声压级开始接近最大声压级之前失真通常不会随着声压级升高而大幅增加,但是,当达到最大声压级时,失真开始快速升高。麦克风声学过载点通常是指失真达到10%时的声压级。是表征麦克风能够拾取的最大声音的能力
5、相位
包含着相同信息的多个信号之间的时间关系。如果两个波的相位差大于或者小于180°,在对它们进行叠加时仅会对某些频率产生影响,通常会导致梳状滤波 – 波在某些频率上相互抵消,整个波的波形看起来会像是一把梳子。超过360°的相位差不会造成相互抵消的效果,在技术上会被当成延迟来处理。

6、指向性
指向性表示麦克风的灵敏度随声波入射方向而变化的特性,一般包括全指向,双指向和单指向性(心型,超心型和枪型等)。
三、扬声器(电信号转机械震动)技术指标

1、灵敏度
在扬声器系统输入端加上额定功率1W的电信号,在参考1M处产生的声压,单位用dB表示
2、频率响应
在相同电压而不同频率产生电压特征。
3、额定功率
在额定的非失真范围内的最大输入功率。
4、额定阻抗
与频率有关,是当音频在400Hz时从扬声器输入测量的阻抗。
5、方向性
用于在空间方向上表征扬声器的声压分布特性
6、失真
无法还原原始声音现象。分别为频率失真和非线性失真。频率失真是由于某些频率的强大倍数性,并且失真导致原始高声音的比例,并且原始声音改变。非线性失真是由于扬声器振动系统的振动,并且信号的波动不完全均匀,并且将新的频率分量添加到声波的输出。
7、极性
在接受交流音频电流时,假设正半周使喇叭盆向外推,负半周喇叭盆向内吸,此时标注一个极性。当在音箱内装其他喇叭时也一定要保证喇叭在接受交流音频电流时,正半周使喇叭盆向外推,负半周喇叭盆向内吸这一原则,即喇叭相位要相同。否则就会在2个喇叭同时工作时相互造成干涉(声波相互抵消一部分,且影响另一喇叭的运动),影响声波的振幅和频率,因而造成声音还原的失真,特别影响高频声波的传输。
一般喇叭出厂时都标注了极性,如果没有标注,也可以用万用表最小电流档接在喇叭两端,用手轻推纸盆,表指针摆动同方向的,相同颜色的表笔就是同名端。

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

【中文标题】如何将音频从麦克风传输到扬声器?【英文标题】:How to stream audio from microphone to speaker? 【发布时间】:2013-01-18 19:01:17 【问题描述】:

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

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

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

我可以持续播放 500 毫秒或更短的 SoundEffect 来实现我的目标,但我想知道是否有更复杂的方法让麦克风持续写入 MemoryStream,音频播放控件可以持续读取该内存流。

感谢您的帮助!

【问题讨论】:

如果您使用主扬声器和麦克风,反馈可能会使这听起来很糟糕。想想一个非常糟糕的扬声器,延迟和啸叫......这就是你想要的效果吗? 我专门针对 3.5 毫米插孔,但我不确定反馈会有多糟糕,所以我将扬声器留在了我的问题中。不过你是对的,我不想要那种效果。 【参考方案1】:

我通过使用麦克风向 MediaElement 播放器提供样本的类扩展 MediaStreamSource 类来解决这个问题。

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

// 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));

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

【讨论】:

我稍后会玩这个以确保我可以跟随,但我想说我很可能希望看到你的代码示例。我正在考虑进一步了解这一点,我可能需要我能得到的所有帮助。您的扩展 MediaStreamSource 可能正是我开始所需要的。 当然,我为您上传了整个项目:sdrv.ms/16vz7Jb 这是一个扩音器应用程序,它只会在扬声器中听到任何声音。但请注意,没有声学回声消除功能,因此如果麦克风可以拾取扬声器的输出,它会像疯了一样回声。 非常感谢,先生。稍后我会玩它,看看它与我的目标有多接近。我希望将麦克风输入与音乐播放合并,这样如果我在开车时听耳机(我唯一的音响系统:/),我可以拾取更多的背景噪音。我以某种方式怀疑麦克风是否像普通窗口一样工作,您可以在其中预览麦克风输入并获得相同的效果,因为我不需要录制麦克风。我想你会让我非常接近,为此我感谢你。 祝您一切顺利,如果您需要任何帮助,请告诉我。【参考方案2】:

尼哥

在尝试您的 MegaPhone 项目时,我遇到了以下错误“对象引用未设置为对象的实例。”。 你能看看吗?谢谢

在 MS.Internal.XcpImports.CheckHResult(UInt32 小时) 在 MS.Internal.XcpImports.MediaStreamSource_OnGetSampleCompleted(MediaElement mediaElement,Int32 streamIndex,StreamInteropWrapper streamWrapper,InternalStreamWrapper internalStream,Int64 偏移量,Int64 计数,Int64 timeInHundredNanoseconds,Int64 durationInHundredNanoseconds,Int32 attributeCount,Int32 [] attributeLengths,StringBuilder 属性) 在 System.Windows.Controls.MediaElement.MediaSourceReportGetSampleCompleted (MediaStreamSample mediaStreamSample) 在 System.Windows.Media.MediaStreamSource.ReportGetSampleCompleted(MediaStreamSample mediaStreamSample) 在 Megaphone.MicrophoneSource.microphone_BufferReady(对象发送者,EventArgs e) 在 Microsoft.Xna.Framework.Audio.Microphone.OnBufferReady(EventArgs args) 在 Microsoft.Xna.Framework.Audio.MicrophoneCollection.OnBufferReady(UInt32 句柄) 在 Microsoft.Xna.Framework.FrameworkDispatcher.Update() 在 Megaphone.MainPage.dt_Tick(Object sender, EventArgs e)

【讨论】:

以上是关于音频基础之麦克风功放扬声器的主要内容,如果未能解决你的问题,请参考以下文章

WebRTC Native M96 SDK接口封装--注册语音观测器对象获取原始音频数据registerAudioFrameObserver

WebRTC Native M96 SDK接口封装--注册语音观测器对象获取原始音频数据registerAudioFrameObserver

WebRTC Native M96 SDK接口封装--注册语音观测器对象获取原始音频数据registerAudioFrameObserver

声卡和麦克风和功放怎么连接

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

试图通过 TCP 流式传输 2 路音频?