问题标签 [audio]

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 投票
9 回答
162367 浏览

.net - 使用 C# 从流中播放音频

C# 中有没有办法直接从System.IO.Stream播放音频(例如 MP3),例如从 WebRequest 返回而不将数据临时保存到磁盘?


NAudio解决方案

在NAudio 1.3的帮助下,可以:

  1. 将 MP3 文件从 URL 加载到 MemoryStream
  2. 完全加载后将 MP3 数据转换为波形数据
  3. 使用NAudio的 WaveOut 类播放波形数据

能够播放半加载的 MP3 文件本来会很好,但由于NAudio库的设计,这似乎是不可能的。

这是将完成工作的功能:

0 投票
4 回答
1335 浏览

audio - 重复加载和保存压缩音频文件会降低质量吗?

例如,jpeg 图像就是这种情况?mp3 或 ogg vorbis 音频文件怎么样?

0 投票
10 回答
60190 浏览

javascript - 跨平台、跨浏览器从 Javascript 播放声音的方式?

我正在编写一个 dhtml 应用程序来创建系统的交互式模拟。用于模拟的数据是从另一个工具生成的,并且已经有非常大量的遗留数据。

模拟中的某些步骤要求我们播放“画外音”音频片段。我一直无法找到一种简单的方法来跨多个浏览器完成此操作。

Soundmanager2非常接近我的需要,但它只能播放 mp3 文件,并且旧数据可能还包含一些 .wav 文件。

有没有人有任何其他可能有帮助的图书馆?

0 投票
3 回答
24744 浏览

flash - 检查 SoundChannel 是否正在播放声音

如何可靠地检查 SoundChannel 是否仍在播放声音?

例如,

0 投票
9 回答
5612 浏览

c++ - 为什么 waveOutWrite() 会在调试堆中导致异常?

在研究这个问题时,我在网上发现了多次提到以下场景,总是在编程论坛上作为未回答的问题。我希望在这里发布这个至少可以用来记录我的发现。

首先,症状:在运行使用 waveOutWrite() 输出 PCM 音频的标准代码时,有时在调试器下运行时会出现以下情况:

虽然明显的怀疑是代码中其他地方的堆损坏,但我发现情况并非如此。此外,我能够使用以下代码重现此问题(这是基于对话框的 MFC 应用程序的一部分:)

在任何人对此发表评论之前,是的 - 示例代码播放未初始化的内存。不要在扬声器完全打开的情况下尝试此操作。

一些调试揭示了以下信息: waveOutPrepareHeader() 用一个指针填充 header.reserved,该指针指向一个似乎包含至少两个指针作为其前两个成员的结构。第一个指针设置为 NULL。调用 waveOutWrite() 后,该指针被设置为分配在全局堆上的指针。在伪代码中,它看起来像这样:

通常,标头由 wdmaud.dll 的内部函数 waveCompleteHeader() 返回给应用程序。waveCompleteHeader() 尝试通过调用 GlobalHandle()/GlobalUnlock() 和朋友来释放由 waveOutWrite() 分配的指针。有时,GlobalHandle() 会爆炸,如上所示。

现在,GlobalHandle() 炸弹的原因并不是因为堆损坏,正如我一开始所怀疑的那样 - 这是因为 waveOutWrite() 在没有将内部结构中的第一个指针设置为有效指针的情况下返回。我怀疑它在返回之前释放了该指针指向的内存,但我还没有反汇编它。

这似乎仅在波形播放系统缓冲区不足时发生,这就是为什么我使用单个标头来重现它的原因。

在这一点上,我有一个很好的理由反对这是我的应用程序中的一个错误——毕竟,我的应用程序甚至没有运行。有没有人见过这个?

我在 Windows XP SP2 上看到了这个。声卡来自SigmaTel,驱动版本为5.10.0.4995。

笔记:

为了防止将来出现混淆,我想指出,问题在于使用 malloc()/free() 来管理正在播放的缓冲区的答案是完全错误的。您会注意到我更改了上面的代码以反映建议,以防止更多人犯同样的错误——这没有什么区别。waveCompleteHeader() 释放的缓冲区不是包含 PCM 数据的缓冲区,释放 PCM 缓冲区的责任在于应用程序,并且不要求以任何特定方式分配它。

此外,我确保我使用的所有 waveOut API 调用都不会失败。

我目前假设这要么是 Windows 中的错误,要么是音频驱动程序中的错误。反对意见总是受欢迎的。

0 投票
5 回答
27893 浏览

java - 在没有临时文件的Java中将音频流转换为WAV字节数组

给定一个包含压缩格式(例如 MP3 或 OGG)的音频数据的调用,我希望创建一个InputStream包含输入数据的 WAV 转换的数组。不幸的是,如果您尝试这样做,JavaSound 会给您以下错误:inbyte

我设法通过将 wav 写入临时文件,然后将其读回来使其工作,如下所示:

这显然不太理想。有没有更好的办法?

0 投票
6 回答
7418 浏览

c# - .NET 的最佳音频压缩库是什么?

我正在为.NET 寻找一个好的音频压缩库。任何使用 MP3 的东西都已经过时了(因为许可问题)。基本上我只需要能够将常规 WAV 音频数据压缩成某种格式,然后解压缩回 WAV。最好是代码都是 .NET(C# 或 VB.NET),但我认为这不太可能。它应该是无损的或相对无损的(最好是 192 MP3),压缩比至少为 4:1。我更喜欢基于缓冲区的 API,但基于文件的 API 也可以。

有谁知道这样的事情?

0 投票
4 回答
70826 浏览

c# - 在 C# 中创建正弦波或方波

如何生成给定频率的音频正弦波或方波?

我希望这样做来校准设备,那么这些波有多精确?

0 投票
3 回答
1939 浏览

java - 在类中存储图像/声音的最佳方式?

我正在开发一种应用程序实例之间的交换格式,以便用户可以将信息保存到文件并稍后恢复。整个“交换格式”是一个被序列化并写入磁盘的类。

您建议如何在该类中存储图形/声音信息?我想避免只是将文件放入 .jar 中。

0 投票
3 回答
4257 浏览

math - 如何自然淡出音量?

我已经尝试过在大约半秒的时间内使用 sigmoid 和对数淡出音量来缓冲暂停和停止,并防止我的音乐应用程序中出现爆音。

然而,这些听起来都不“自然”。我的意思是,他们听起来很糟糕。就像一个业余工程师负责录音机一样。

我知道耳朵在音量方面是对数的,或者至少,两倍的功率并不意味着两倍的音量。音量衰减有什么神奇的公式吗?谢谢。