问题标签 [sample-rate]

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 回答
4405 浏览

c++ - 您如何获得 Windows 音频播放的当前采样率?

我正在使用 Windows waveOut API(又名 MME 或多媒体扩展)mmsystem.h。某些程序会更改音频播放采样率(例如,从 44.1kHz 到 48kHz),这对我的程序检测当前播放采样率非常有用,因此它可以警告用户 Windows 将重新采样程序的输出。

根据此文档http://msdn.microsoft.com/en-us/library/aa909811.aspx,waveOutGetPlaybackRate返回设备当前正在执行的重采样百分比(例如,设备以 44.1 播放,程序以 44.1 播放音频所以它会返回 1.0)。我很好奇是否有办法获得设备的绝对采样率,而不是相对的。在 Windows Vista/7/8 中,您可以通过以下方式手动找到此值:控制面板 > 声音 > 播放,右键单击默认播放设备并选择属性,然后选择高级选项卡。所以我试图通过查询操作系统来获取这里的“默认格式”值。

有问题的程序是用 Pascal 编写的,但是,我通常使用 C/C++ 引用。

0 投票
1 回答
351 浏览

portaudio - C 语言中带有 Libsndfile、Libsamplerate 和 Portaudio 的 Varispeed

我正在使用 OpenGL、Libsamplerate、portaudio 和 libsndfile 开发 C 语言的音频可视化器。我在整个范例中正确使用 src_process 时遇到了困难。我的目标是使用 src_process 在可视化器中实时实现 Vinyl Like 变速。现在我的实现改变了音频的音高而不改变速度。由于听起来像丢失帧,因此它会产生很多失真,因为当我使用 src_ratio 降低速度时,它听起来几乎像切碎的样本一样颗粒状。任何帮助将不胜感激,我一直在尝试我的缓冲块,但是 10 次中有 9 次我得到一个 libsamplerate 错误,说我的输入和输出数组重叠。我也一直在查看 libsamplerate 附带的速度更改示例,但我找不到哪里出错了。

这是我认为相关的代码。谢谢,如果我能更具体一点,请告诉我,这个学期是我在 C 和编程方面的第一次经历。

0 投票
1 回答
1141 浏览

android - 陀螺仪精度是否与 Android 中的传感器延迟相关?

我需要对陀螺仪进行非常精确的旋转测量,采样率至少为 50Hz(越多越好)。

这就是为什么我想知道改变陀螺仪的采样率是否会增加/降低测量的准确性。例如,如果将陀螺仪的更新速率设置为低于SENSOR_DELAY_FASTEST,这是否会提高旋转测量的准确性?

谢谢!

0 投票
1 回答
252 浏览

ios - Xcode 中有什么方法可以提高音频播放质量吗?

我正在制作一个应用程序,为用户提供丰富的自然声音集合。然而,曲目是 48khz,我需要将它们降低到 38khz,以便应用程序的大小可以减小。我将使用 AVFoundation 播放音频。现在我担心这会导致音质下降。Xcode 中是否有任何方法可以提高播放期间的音频质量。

0 投票
1 回答
114 浏览

mongodb - MongoDB 聚合框架采样率

我想为我的数据库解决方案尝试 MongoDB,所以我正在玩弄它。聚合框架是完美的,大多数文档都很好地解释了我必须做什么。

我的数据如下所示:

例如,如果我想每秒聚合我的数据,我会这样做:

我的问题是,我该怎么做才能按 预定义的采样率聚合我的数据,例如 $second 或 $minute,但假设是 30 秒?

使用我的示例中的代码,我想返回 2 个结果。

提前致谢!

0 投票
1 回答
548 浏览

matlab - 尝试在 simulink 中标准化信号时出现非法速率转换

我在 simulink 中有一个信号,我想对其进行标准化,以便信号的最大值始终为 1。所以我使用 MaxRunningResettable-Block 来记住迄今为止传递的最大值。然后我将信号除以该值。

对信号生成块、正在运行的可复位块、除法块和示波器进行的小测试运行良好。但是当我将此归一化函数添加到我的 simulink 模型时,我收到一个错误:“模型初始化失败 - 发现涉及单位延迟的非法速率转换”

我什至不需要将小测试用例连接到我的其他模型。只需将其放入我的模型中,我就会收到此错误。奇怪的是,当我复制 RunningResettable 块时,它会变成黄色——这表明我认为它具有不同的采样率。我不明白为什么会这样。我已经尝试在 RunningResettable 后面添加一个零阶保持块,但这没有帮助。

带有麻烦的 RunningResettable-block 的 Simulink 模块表

正如建议的那样,我尝试将另一个常量块添加到 RunningResettable-Block 的 R 输入。我为该块尝试了几个采样频率(-1、0、1/fAb),但这并没有帮助。 将常量块添加到 R-input 后​​发生错误

0 投票
1 回答
1456 浏览

java - Java - 确定要从波形文件中读取以获取时间戳的字节数

我有一个AudioFormat对象(从 返回audioInputStream.getFormat())。我有一个时间戳(以毫秒为单位),我想从相应的 wav 文件中开始读取。如何确定要从 AudioInputStream 读取/跳过多少字节才能到达适当的时间戳?

我对帧速率(以及它如何与采样率无关)感到困惑。

这就是我到目前为止所拥有的...... startPos 是以毫秒为单位的时间戳。

我在哪里下班?

编辑:我的代码确实有效,只是有其他错误。

0 投票
0 回答
577 浏览

android - fft 不适用于 44100 采样率

在分析 FSK 信号之前,我一直在这里问几个问题。我正在生成和记录一个采样率为 44100 的 fsk 信号,它包含两个频率,'1' 为 934Hz,'0' 为 510Hz,编码的消息是一个字符串,我将其转换为二进制表示,每个位使用2048 个样本。在代表数据本身的音调之前,我有一个频率为 440Hz 的初步音调。我使用以下代码来捕获音频字节,唯一的区别是我将它们写入 ByteArrayOutputStream https://stackoverflow.com/questions/23432398/audio-recorder-in-android-process-the-audio-bytes

我之前用的是8000的采样率,决定提高传输率,所以我改变了采样率。当我的记录器和发射器使用 8000 采样率时,我设法找到信号的起点并分析数据,由于某种原因,当我使用 44100 的采样率时,我的 fft 似乎无法正常工作,我找不到正确的频率,当我使用 8000 采样率时,我什至看不到我曾经看到的泛音,我使用这个类的 hann 窗口函数并将每个窗口相乘:https ://github.com/jpatanooga/Canova/blob/主/canova-data/canova-data-audio/src/main/java/org/canova/sound/musicg/dsp/WindowFunction.java

现在,我只是在记录的数据中推进每个 2048 个样本来查看结果。我不太确定为什么 fft 不起作用,有什么想法吗?

我附上了一些我使用的功能:

将音频字节转换为表示归一化正弦波的 doule 数组的函数(发送的数据为小端格式):

fft函数:

提取数据位的函数:

0 投票
1 回答
2876 浏览

java - AudioTrack 采样率不一致

使用 AudioTrack 进行播放时,有时我需要重新采样不符合 AudioTrack 支持的采样率的音频。这样做时,我需要确定当前设备下、当前音频配置下 AudioTrack 支持的最大采样率。

由于 AudioTrack 允许的采样率没有得到很好的记录,我决定窥探源代码AudioTrack并发现这条惊人的行:

无论设备的实际播放能力如何,该实例似乎都在AudioTrack应用 96 KHz 的硬限制。

更令人困惑的是在AudioFormat类中,我在其中传递给 的构造函数(API 21)AudioTrack,其中包含以下行:

在它的setSampleRate()方法中。现在这是192 KHz的硬限制。因此,将 > 192 KHz 传递到 AudioFormat(或其构建器)将导致IllegalArgumentExceptionAudioFormat配置的 192 KHz < x < 96 KHz 采样率 AudioFormat 传递到 AudioTrack 也会抛出IllegalArgumentException.


到目前为止,我发现最令人困惑的是getNativeOutputSampleRate()AudioTrack 中的方法,它实际上确实返回了正确的输出采样率(好吧,鉴于它是直接从本机层运行的,所以并不令人惊讶,但如此不一致)。

最重要的是,该方法setPlaybackRate()声称:

有效的采样率范围是从 1 Hz 到 getNativeOutputSampleRate(int) 返回值的两倍。

事实上,我确实尝试过,它有效吗?考虑以下代码段:

按照程序流程,当原生采样率< 96 KHz时,代码打印出:

本机码流速率:48000 Hz
音轨创建成功(直接)

但是,当我连接一个播放能力高达192 KHz的外部 DAC 时,我得到:

本机流率:192000 Hz
无法以本机速率创建 AudioTrack!
轨道创建成功(间接)

这些不一致是怎么回事?而且,setPlaybackRate()与传递给构造函数的采样率相同吗?

0 投票
7 回答
26519 浏览

javascript - 更改 AudioContext (getUserMedia) 的采样率

我试图通过 getUserMedia 录制 48000Hz 的录音。但没有运气。返回的音频 MediaStream 返回 44100Hz。如何将其设置为 48000Hz?

以下是我的代码片段:

startUsermedia 函数:

我尝试更改 AudioContext 的属性 sampleRate,但没有运气。

如何将采样率更改为 48000Hz?

编辑:我们现在也可以使用可以以 48000Hz 录制和导出 wav 文件的闪存解决方案