问题标签 [amr]

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 投票
0 回答
81 浏览

blackberry - 在 BlackBerry 上可视化实时 AMR 音频

我有代码可以很好地录制音频。我想在录制时添加一些音频的可视化,比如波形,或者只是一个普通的温度计风格的可视化,这样用户就知道正在录制一些东西。我还没有找到任何可以查询的侦听器或方法来获取录制音频的当前音量。我现在的想法是我可以解析 AMR 字节流并尝试直接将其可视化,但是该功能的复杂性令人望而却步,因此我希望有一个更直接的 API 可以使用。或者,如果您了解 Java-ME amr 解析代码,那也很有用 - 我承认我还没有在 AMR 方面做太多研究,因为我希望有一种更直接的方法来测量当前音频音量级别。

0 投票
0 回答
2067 浏览

android - MediaRecorder 和 ParcelFileDescriptor.createPipe()

我的任务是长时间录制音频并将三秒钟的文件发送到服务器以识别文本(我使用谷歌)。如果我直接写入文件,那么我需要重新初始化我的记录器以启动新文件,这需要大量时间来启动和停止 mediarecorder。这就是为什么我决定使用 ParcelFileDescriptor.createPipe() 这就是我创建和初始化我的记录器的方式:

然后,我创建输入流来读取记录数据:

从这个阅读器读取的数据我写入 FileOutputStream。

每 3 秒我创建一个新文件和新的 FileOutputStream,并将数据从以前的文件发送到服务器。

我正在根据 ARM 格式读取字节(文件头,而不是读取每个帧的头位,然后读取整个帧)。

在带有 android 2.3.3 的 Nexus One 上,它运行良好,但在 Galaxy S III、Galaxy Nexus 和 LG p990 上,它会写入设备播放器无法读取且谷歌无法识别的内容。谷歌识别器返回类似“ok ok”或“######”的东西(看起来文件包含某种噪音)。

有谁知道,为什么这对于不同的手机/平台不能以相同的方式工作?

谢谢,

PS 我不能使用 AudioRecord – 谷歌需要 AMR(或 speex,或 flac)

0 投票
5 回答
3589 浏览

audio - 未知的音频格式 - 在哪里挖掘?

在我的安卓手机(飞利浦 Xenium W632)上,我有一个通过它自己的软件来录音的选项(没有任何外部程序,这个选项在服务菜单中打开)。问题是我尝试过的任何播放器都不知道生成的格式。从内容上看,文件似乎没有被打包或加密,因此对于熟悉该领域的人来说,识别格式可能不是很困难。我想这个问题可能过于具体,无法在 SO 上提出 - 但我根本不知道这些人交流的活跃论坛。因此,我将不胜感激为此类资源提供任何提示。对此问题的更正确标题/标签的建议也将不胜感激。

技术信息:文件的名称如“Mon_Apr_2013__10_48_56.vm”,均从标头 0x66 0xAA 开始,每秒记录约 7.9 kb。我当然可以提供示例文件。

UPD。1)我把示例文件放在这里: 10秒录音,133 kB122 秒录音,975 kB

2)假设它是一种“三星语音备忘录文件”,我首先尝试了 QualComm PureVoice 转换器,然后是 PureVoice 应用程序,然后是三星 PC Studio 版本 7.2.24.9 - 都失败了。

3)尝试了 MediaInfo(感谢@Jan 的建议)-它无法识别文件。

0 投票
0 回答
1028 浏览

android - 使用 AmrInputStream 将 PCM 转换为 AMR-WB

我的 Android 应用程序需要将 WAV 中录制的音频转换为 AMR-NB 和 AMR-WB。我完成了使用AmrInputStream转换为AMR-NB的工作。

在 AmrInputStream 中, SAMPLES_PER_FRAME 的值被硬编码为8000 * 20 / 1000 ,即使将 SAMPLES_PER_FRAME 更改为(16000*20/1000) ,音频也没有变化。

是否可以使用 AmrInputStream将 PCM 转换为AMR-WB(16 khz) ?

0 投票
1 回答
486 浏览

c# - Can't play .amr file in wp8

I use AudioVideoCaptureDevice to record the voice and save it to isolated storage with amr format

I can play it by windows media player. But I can't play it with SoundEffect in WP8.

Please help me to know why and help me to solve this problem. Thanks.

0 投票
1 回答
843 浏览

audio - 如何在 Windows Phone 8 中播放 amr 文件?

根据我的阅读,WP8 确实支持 amr

不过,我不知道怎么玩。

  1. 使用的时候SoundEffect什么都听不见,可能是因为只SoundEffect支持wav这里已经有人问过了。
  2. 我不想使用BackgroundAudioPlayeror MediaPlayerLauncher,因为它们太过分了

有什么解决方法可以玩amrSoundEffect还是有更好的 API 来玩?

P/S:这个amr文件是用WP8 API记录的

0 投票
1 回答
1205 浏览

android - How to convert aac/amr to pcm in Android

I have several recorded sound files on an Android device which are encoded as aac (in an mp4 container). I also have some which are encoded as amr (in a 3gpp container). I wish to convert both types into raw PCM data values for the purpose of plotting the audio waveform to a Canvas.

Is there a library built into android which can do this conversion? If there is no standard way, what is the most common 3rd party library for this? The vast majority of examples I have found are encoding from PCM to other file formats, and not decoding to PCM.

Thanks.

EDIT: I would prefer not to use NDK if possible.

0 投票
0 回答
685 浏览

android - 录音时如何显示波形并与播放时的波形同步

我遇到过这样的问题,就是边录边显示波形,就像recforge app里显示的一样。随着录音的进行,波形应该一点一点地显示出来,播放相同的录音时波形应该是一样的。

我希望录音格式可以是amr。

下面是我尝试过的:使用mediarecord的getMaxAmplitude获取值并使用Drawline绘制出来,这似乎可行,但问题是当我参考ringdroid的源代码播放时,我发现波形不同步与录音。

那我就想问一下,怎么让录音和播放的波形显示一样,怎么从cheapAmr.java中获取录音的Amplitude

recforce : https://play.google.com/store/apps/details?id=dje073.android.audiorecorderlite&hl=zh_CN

环形机器人:https : //play.google.com/store/apps/details? id=com.ringdroid

0 投票
2 回答
2387 浏览

android - Android - 以编程方式获取 AMR 音频文件的持续时间

如何获取 AMR 文件的持续时间?

我想在录制停止后获取文件的持续时间而不创建任何 MediaPlayer 并从中获取持续时间。对于常规的 Wav 文件,我只需执行以下操作:

但是对于 AMR,我不知道 byteRate 并且我不确定这是否可以,因为 WAV 是原始 PCM 数据(未压缩)并且 AMR 是压缩的。

0 投票
1 回答
2442 浏览

java - 从 AMR-NB 文件中提取音频帧

我编写了一个算法来从 AMR 文件中提取每一帧。我认为文件的前 6 个字节是标题,以下信息是音频帧。每个音频帧由帧头和音频数据组成。帧头以字节为单位告知帧的大小(使用 CMR 模式表 - http://www.developer.nokia.com/Community/Wiki/AMR_format)。帧大小存储在帧的第一个字节 -> 第二位到第 5 位,将 MSB 计为第一位。

该算法不起作用,我决定以二进制方式(0 和 1)在屏幕上显示每个字节,看起来有时帧大小号大于 7,而 CMR 表只有 0...7 个值。

下面是 CMR 表:

我的输出(来自 amr 文件的每个字节)是:

我取了字节 nr 6:10011110 -> 0011 是 nr 3,3 对应的 CMR 值是 18。我跳过 18 个字节,然后到达字节 nr。6+18 = 24: 00000000 - 0 的 CMR 值为 13,我跳过另外 13 个字节 -> 24+13=37: 01101110 -> 1101is 13 WHICH ISN'T IN CMR table

我做错了什么?我想以二进制方式打印是正确的。下面是读取每一帧的算法(不用于显示二进制方式):

[EDIT]

看来我做错了从字节到 BitSet 的转换,然后导致算法失败。在字节 nr.6 处,它应该表示为数字 121,但错误地表示为 nr 158。二进制输出也是错误的,因为它使用相同的转换。我没有检查转换方法(我没有在这里发布)。对不起打扰。