问题标签 [audiotrack]

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

android - 用于在 android 中播放的音轨

音轨允许将 PCM 音频缓冲区流式传输到音频硬件进行播放。write(byte[], int, int)这是通过使用和方法之一将数据“推送”到音轨对象来实现的write(short[], int, int)

PCM 是脉冲编码调制,是 PCM 在电话呼叫期间将模拟语音调制为数字语音吗?以及要播放的硬件列表?只有扬声器还是更多?PCM 可以允许在 GSM 网络上播放音频吗?

0 投票
1 回答
437 浏览

android - MediaPlayer 获得最大振幅

我想在录制时在我的录制应用程序中实现一个 VU 表AND playing。录音的时候知道怎么做,但是播放的时候出现问题。How can I grab the max amplitude at a given point in time from android MediaPlayer?我知道有一种方法,因为我看到一些小部件在我的设备上播放音乐时会做同样的事情。我不想使用 android Visualizer 进行渲染,我想让我自己的 VU 表适用于 OS 2.3+ 的设备。基本上,我需要 MediaPlayer 的 getMaxAmplitude。

0 投票
1 回答
1475 浏览

android - 需要了解 AudioRecord 和 AudioTrack 如何用于原始 PCM 捕获和播放

我在线程中使用以下代码从麦克风捕获原始音频样本并通过扬声器播放。

哪里record是一个AudioRecord并且track是一个Audiotrack。我需要详细了解(如果可能,以简化的方式)AudioRecord 如何存储 PCM 数据和 AudioTrack 如何播放 PCM 数据。到目前为止,我是这样理解的:

在此处输入图像描述

随着while()循环的不断运行,record得到SIZE_OF_RECORD_ARRAY个样本(目前为1024个)如图。样本连续保存在 lin[] 短裤数组中(16 位短裤,因为我使用的是 16 位 PCM 编码)。这是由record.read(). 然后track.write()将这些样本放入由硬件播放的扬声器中。这是正确的还是我在这里遗漏了什么?

0 投票
1 回答
4273 浏览

android - 在 AudioTrack.MODE_STATIC 中使用 AudioTrack?

我找到了很多教程和帖子,展示了如何在其中AudioTrack播放 wav 文件,AudioTrack.MODE_STREAM并且我已经成功实现了这个示例

但是,我在一次播放多个音轨时遇到性能问题,并认为我应该首先使用创建音轨,AudioTrack.MODE_STATIC然后每次只调用 play。

我找不到任何关于如何实现这一点的资源。我怎样才能做到这一点?

谢谢

0 投票
3 回答
8111 浏览

java - Android 音频编程的噩梦——soundpool、audiotrack 啊?

我已经构建了一个简单的音乐音序器 Android 应用程序,可以播放多个音频文件。

最初我使用 SoundPool 播放 mp3 文件,它在 2.3.4 上与旧的 HTC Droid Incredible 完美配合。然后我在运行 4.3 的 Galaxy Nexus 上对其进行了测试,结果非常糟糕。整个地方的音频时间都出现了故障/咔嗒声/爆裂声。

所以我花了几天时间使用 AudioTrack 制作了一个播放器,包括一个 mp3 解码器,让它在 Galaxy 和 HTC 上都能完美运行。现在我刚刚在 Nexus 4(运行 4.3)上对其进行了测试,性能很糟糕——时间到处都是。SoundPool 甚至可以在此设备上提供更好的性能。

我真的很沮丧,不知道该怎么做才能完成我的应用程序,所以如果有人能帮助我,我将不胜感激。我在下面放了一些音频播放器的代码示例。我已经尝试了我能想到的所有方法,包括更改缓冲区大小、使用AudioTrack.MODE_STATIC等。新的 Google 设备具有低延迟音频,所以很奇怪在我的旧机器人上一切工作得更好!

提前致谢

0 投票
1 回答
1258 浏览

android - 音轨随机停止声音,但状态为 STATE_INITIALIZED 和 PLAYSTATE_PLAYING

我正在循环播放和音轨...

但是在随机时间(几分钟)之后,它停止发声,但状态是 STATE_INITIALIZED 和 PLAYSTATE_PLAYING。在那一刻,我收到了这条信息......

我需要无限循环音轨,请,有人知道如何解决吗?

PD:停止似乎只发生在 4.1 及更高版本中。

0 投票
0 回答
1682 浏览

android - Android:通过单声道播放单声道声音

我正在尝试通过单个通道播放单声道声音,我唯一能想到的是将第二个通道交织到字节数组中,更改AudioFormat为立体声然后调用 audioTrack.setStereoVolume(leftVolume, rightVolume);将一个通道的音量设置为零。有没有更简单的方法?

回放:

0 投票
2 回答
3742 浏览

android - 将单声道转换为立体声

我正在尝试将 16 位单声道声音转换为立体声。声音存储为字节数组,因此据我了解,这意味着我一次复制两个字节。

在此处输入图像描述

我这样做对吗?我生成的代码改变了频率。

编辑:

我成功生成单音并将其存储在byte [] generatedSnd

播放单声道声音(工作):

转换为立体声:

我想做的是只从一个通道播放声音

0 投票
1 回答
2742 浏览

android - android系统中各种声源有什么区别?

我正在尝试在 Android 中构建一个实时降噪程序,
我使用 AudioRecord 获取原始输入声音数据并使用 AudioTrack 来播放它。
在初始化 Audiorecord 时,我使用了代码

回放时我使用代码

这些设置非常适合我的 Nexus 7 平板电脑(不是手机),但是当我尝试在 LG Optimus(或任何其他手机)上运行它时,输出音量非常低,即使在硬件最大时也是如此。如果我将 AudioManager.MODE_IN_COMMUNICATION 更改为其他一些值,有时根本没有输出,或者有时在第一次执行程序时输出很大,然后在后续运行中没有输出。这个问题在 Nexus 7 中没有出现(虽然某些选项确实会导致 Nexus 7 中没有声音输出)

(我对原始音频数据执行 FFT,然后通过降噪算法函数运行它以计算 FFT 后每个频率分量的增益值,并将最终输出乘以 thsi 增益值。我已经能够弄清楚,只要有是扬声器没有输出,这通常是由于这些增益值获得了 NaN 值,但这是一个不同的问题)。

Audiomanager我想知道的是,中定义的各种类型的音频输出源,比如AudioManager.MODE_IN_COMMUNICATION和中的音频输入源到底有什么区别MediaRecorder.AudioSource?为什么他们的某些选项会导致平板电脑和手机出现不同的行为?

--- EDIT ---
另外我最近被告知,在手机中,执行此程序后,手机中的输出声音很小,退出程序后,手机正常运行中的声音继续停留在那个小音量。一旦程序终止,如何确保所有与声音相关的(或任何其他手机资源)恢复到原来的设置?

--- 编辑 2 ---
旧的初始化代码:

--- EDIT 3 ---
当前初始化方案

--- 编辑 4 ---
onResume() 中的代码

onPause() 中的代码

0 投票
2 回答
3341 浏览

java - 如何将 byte[] 转换为 float[] 并返回 Java?

我正在通过 InputStream 从 .wav 文件中读取数据,并且 read() 返回字节。我使用的一个声音处理库,只接受 float[] 来处理。完成后,它给了我一个 float[] 回来。现在我需要再次以字节格式写入 Android 的 AudioTrack。

如何将这些转换bytesfloats[],然后再转换为byte[]?我搜索了一下,但一切似乎与我的情况有点不同,所有问题似乎都以不同的方式解决......所以我现在有点迷路了。

如果某种图书馆已经提供了这种转换,我也很高兴听到这个消息!

谢谢!