问题标签 [waveout]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1292 浏览

windows - Windows 核心音频 API + WaveOutXxx API

我wave写了一段代码来播放WAV文件。我正在使用 WavOutxxx API 来完成此操作。有据可查的是,WavOutXxx API 将其流打开到默认会话。现在由于某些原因,我尝试使用 IAudioSessionControl API(Windows 核心音频接口)控制 WaveOutXxx API 打开的会话。

你能告诉我这是否真的可能吗?我的代码不涉及进程间通信,因为一切都在同一个代码中处理。MSDN 说这是可能的(http://msdn.microsoft.com/en-us/library/dd371428(v=vs.85).aspx),但我不知道如何执行此操作或任何示例。如果有人能指出一些相关的东西,那将是非常友好的。

谢谢。

0 投票
1 回答
620 浏览

c# - WaveOut 将波形文件播放到设备的特定通道

我正在使用WaveOutAPI 播放 .wav 文件,使用设备功能获取设备信息。有什么方法可以获取频道信息(例如ASIO如何给出)并且需要将两个不同的.wav文件播放到设备的两个不同频道。请在这方面帮助我。任何 C# 示例都会有所帮助

最好的问候, 拉马钱德兰

0 投票
2 回答
2319 浏览

c++ - 使用 WaveOutOpen(C++) 播放 .wav

我需要使用 waveOutOpen 函数播放音频文件(.wav)。我为此找到了手册。http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=4422&lngWId=3但我不知道如何更改 .wav 文件。请帮我...

0 投票
1 回答
1195 浏览

c++ - 按 ID 命名的音频设备名称(waveout c++)

我需要通过 ID 发现音频设备的名称。我使用 WaveOut 函数。请帮我

0 投票
2 回答
2515 浏览

audio - 使用 WaveOUT API 产生无失真的 Tone 声音所需的最小音频缓冲区是多少

WaveOut API 是否对当前播放的缓冲区大小有一些内部限制?我的意思是,如果我提供一个非常小的缓冲区,它是否会以某种方式影响播放到扬声器的声音。当我用小缓冲区生成和播放正弦波时,我遇到了非常奇怪的噪音。像高峰或“BUMP”之类的东西。

完整的故事:

我做了一个可以实时生成窦性声音信号的程序。可变参数是频率和音量。项目要求最大延迟为 50 毫秒。因此该程序必须能够实时产生具有手动可调音频信号频率的正弦信号。

我使用 Windows WaveOut API、C# 和 P/invoke 来访问 API。

当声音缓冲区为 1000 毫秒时,一切正常。如果我根据延迟要求将缓冲区最小化到 50 毫秒,那么对于我在每个缓冲区结束时遇到的某些频率,会出现噪音或“BUMP”。我不明白生成的声音是否格式错误(我检查过但不是)或者音频芯片发生了什么问题,或者初始化和播放有一些延迟。

当我将制作的音频保存到 .wav 文件时,一切都很完美。

这意味着我的代码中一定有一些错误,或者音频子系统对发送给它的缓冲区块有限制。

对于那些不知道 WaveOut 必须首先初始化的人,然后必须为每个缓冲区准备好包含需要播放的字节数的音频头以及指向包含需要播放的音频的内存的指针成为玩家。

更新

以下组合会产生噪音 44100 SamplingRate、16 位、2 通道、50 毫秒缓冲并生成 201Hz、202Hz、203Hz、204Hz、205Hz ... 219Hz、220Hz、240Hz 的 Sinus 音频信号,没问题

为什么相差20,我不知道。

0 投票
1 回答
463 浏览

audio - 如何在 Windows CE 6.0 R3 上 P/Invoke WaveOut API

如何在 Windows CE 6.0 R3 上 P/Invoke WaveOut API?

当我把这个

它适用于 Window XP, 7,但在 Wnidows CE 6.0 上会抛出消息“Can't P/Invoke winmm.dll”。

我究竟做错了什么?WaveOut API 是移动到其他 dll 还是其他什么?

无论如何,SoundPlayer(来自 .NET Compact Framework 3.5)工作正常。

0 投票
1 回答
1603 浏览

c# - 如何在 C# 中在 ARM 上运行的 Win CE 上初始化 WaveOUT API

我正在尝试在 Win CE (ARM) 上运行 WinOut API,但使用在 Windows 7 上运行的相同代码,我在行中获取 MMSYSERR_INVALIDPARAM 以进行缓冲区准备。

我认为这是 ARM 字节边界缓冲区对齐的问题,但我不知道如何在 .NET Compact Framework for Windows CE 中做到这一点。

我试图找到一些解决方案或解释,但什么也没有。

更新

这是适用于 Win CE 和 .NET Compact Framework 的 P/Invoke。在 Internet 上可以找到与“winmm.dll”而不是“coredll.dll”相关的 P/Invoke。Winmm.dll 存在于 Windows XP、7 上。Windows CE 仅适用于 coredll.dll。如果在 WinCE 上使用“winmm.dll”,则会收到以下消息“无法 P/Invoke winmm.dll”

使用的数据结构和常量

0 投票
0 回答
319 浏览

audio-streaming - 如何同时实时录制和播放声音?

我有一个接收器,我希望能够听到接收器正在传输的音频并将该音频保存为 wav 文件。我编写了一个客户端-服务器应用程序来与接收者通信。接收器正在通过 udp 传输音频,我使用 WaveOut 功能播放音频,但我遇到了一些问题:

1) 有没有办法使用 WaveIn 函数来录制音频?我以这种方式尝试了一些东西,但 get dev caps func 没有找到任何设备。我可以愚弄 func 认为有设备吗?

2) 我尝试将数据直接写入 wav 文件,并注意到流中添加了噪音。我是否需要先将数据写入原始 pcm,然后将其转换为 wav 文件,还是有其他方法?

还有其他建议吗?

0 投票
1 回答
159 浏览

waveout - 使用 waveOut API 的意外波形

waveOut 接口有问题。我想编写一个简单的类结构,其中我有一个 AudioStream 类,它使音频输出变得非常简单。我有一个构造函数,它采用以下参数: AudioStream32(int sampleRate, int sampleSize, bool stereo, int bufferSize) (sampleSize 是以字节为单位的样本大小,其余部分希望不言自明)

这个想法是我初始化 AudioStream 一次,然后调用 setSample(float sample) 来设置音频流。该类处于开始阶段,因此当前仅实现双缓冲和单声道声音。

在 setSample 方法中,我将浮点样本转换为 0 到 2^(8*sampleSize) 范围内的无符号整数,然后将该无符号整数转换为无符号字符。我也可以直接使用 unsigned int,但是这样我就不能重用我用于其他 sampleSizes 的代码。代码:

mid 是一个无符号整数,已分配值 (1 << (sampleSize * 8 - 1)) - 1 (这只是执行 2^(sampleSize * 8 - 1) 的更快方法)所以当 sampleSize 为 1 时,这将评估为 127,当 sampleSize 为 2 时,评估为 32767(或者,一般来说,大约是最大值的一半)。

当我使用 1 作为 sampleSize 时,这很好用(所以,当我使用单个字符作为样本时)。但是,当我使用 2 作为 sampleSize (或 2 个字节或一个短整数作为样本的大小)时,我得到了非常奇怪的结果。

我尝试流式传输一个简单的正弦波。当我使用 1 作为 sampleSize 我确实得到一个正弦波作为波形。但是,当我使用 2 作为 sampleSize 时,我得到以下奇怪的波形:

我奇怪的波形

我通过连接音频输出和麦克风输入的迷你插孔电缆在 Audacity 中记录了波形,并将其记录为 32 位浮点流。输出实际上是一个 16 位的 int 流。

这似乎表明存在溢出问题,或者在无符号和有符号整数或字符之间转换存在问题。更奇怪的行为发生了:缩放(或改变音量,不管你怎么称呼它)我发送给 setSample 方法的样本似乎并不重要,除非我将它设置为 0 或非常接近于零(0.0001 仍然产生相同的结果波形,0.00001 产生静音)。

一件非常奇怪的事情是,当我尝试除以 512 而不是 256(即在 setSample 方法中将“>> 8”更改为“>> 9”)时,一切似乎都有效(包括更改声音) . 声音比我使用 1 作为 sampleSize 时要弱,所以看起来这仍然不是正确的方法。

很遗憾,我无法以简单的方式将我写入声音设备的样本与声音设备的输出进行比较。这样,我至少可以弄清楚问题出在字节格式上还是在我所做的转换中。

有谁知道发生了什么?

0 投票
2 回答
124 浏览

waveout - 扬声器和一个使用 waveout 的耳机中没有立体声音频

我已经使用 MSoft WaveOut api 编写了一个应用程序,它工作正常,除了我的扬声器不只播放立体声单声道。当我将耳机插入两个插孔之一时,我得到相同的单声道行为,但另一个插孔以立体声播放文件。如果我使用使用 DirectX api 的东西,所有播放都以立体声播放。我的设备是 Dell Studio XP。有人可以提出一个理由吗?