wav转amr以及简单调整音量

说一下wav转amr的方式。wav是PC上录制音频最容易生成的方式,但是缺点是生成的音频体积比较大。amr是手机上音频播放比较主流的格式,优点是音频体积小,易于传输。

转换的方式很简单,amr分两种,这里以nb为例。首先需要下载opencore-amr,将静态库和文件导入工程里。然后输入以下代码

int wav2Amr( const char *infile, const char *outfile) {
	enum Mode mode = MR122;
	int ch, dtx = 0;
	FILE *out;
	void *wav, *amr;
	int format, sampleRate, channels, bitsPerSample;
	int inputSize;
	uint8_t* inputBuf;

	int modeRate = 4750;
	mode = findMode(modeRate);

	wav = wav_read_open(infile);
	if (!wav) {
		fprintf(stderr, "Unable to open wav file %s\n", infile);
		return 1;
	}
	if (!wav_get_header(wav, &format, &channels, &sampleRate, &bitsPerSample, NULL)) {
		fprintf(stderr, "Bad wav file %s\n", infile);
		return 1;
	}
	if (format != 1) {
		fprintf(stderr, "Unsupported WAV format %d\n", format);
		return 1;
	}
	if (bitsPerSample != 16) {
		fprintf(stderr, "Unsupported WAV sample depth %d\n", bitsPerSample);
		return 1;
	}
	if (channels != 1)
		fprintf(stderr, "Warning, only compressing one audio channel\n");
	if (sampleRate != 8000)
		fprintf(stderr, "Warning, AMR-NB uses 8000 Hz sample rate (WAV file has %d Hz)\n", sampleRate);
	inputSize = channels*2*160;
	inputBuf = (uint8_t*) malloc(inputSize);

	amr = Encoder_Interface_init(dtx);
	out = fopen(outfile, "wb");
	if (!out) {
		perror(outfile);
		return 1;
	}

	fwrite("#!AMR\n", 1, 6, out);
	while (1) {
		short buf[160];
		uint8_t outbuf[500];
		int read, i, n;
		read = wav_read_data(wav, inputBuf, inputSize);
		read /= channels;
		read /= 2;
		if (read < 160)
			break;
		for (i = 0; i < 160; i++) {
			const uint8_t* in = &inputBuf[2*channels*i];
			buf[i] = in[0] | (in[1] << 8);
		}
		n = Encoder_Interface_Encode(amr, mode, buf, outbuf, 0);
		fwrite(outbuf, 1, n, out);
	}
	free(inputBuf);
	fclose(out);
	Encoder_Interface_exit(amr);
	wav_read_close(wav);

	return 0;
}

代码是opencore的测试用例上的。可以直接拿来使用。

接下来说说调整音量的相关处理。测试发现什么设置主音量,wave,麦克风音量,合成器音量等等统统都不管用,起码我测试着效果不明显。既然录制时无法处理,只能在录制结束后对音频文件进行处理。这一篇博客有详细的说明,测试发现能正常运行,注意这里处理的音频,不包含音频头部:点击打开链接

测试发现音频如果将音量设置为大小一致是发不出声音的,所以具体调整需要另行设计算法,但是原理基本就是连接所说的。

时间: 2024-10-15 03:59:16

wav转amr以及简单调整音量的相关文章

ffmpeg常用转换命令,支持WAV转AMR

音频转换: 1.转换amr到mp3: ffmpeg -i shenhuxi.amr amr2mp3.mp3 2.转换amr到wav: ffmpeg -acodec libamr_nb -i shenhuxi.amr amr2wav.wav 3.转换mp3到wav: ffmpeg -i DING.mp3 -f wav test.wav 4.转换wav到amr: ffmpeg -i test.wav -acodec libamr_nb -ab 12.2k -ar 8000 -ac 1 wav2amr

如何在Windows 7/8/10中使用热键来调整音量?

有时,您需要一个热键来调整Windows PC中的音量.例如:播放全屏视频或游戏时需要调整音量. 有一个简单的方法可以做到: 安装并运行Perfect Hotkey软件. 配置键盘快捷键以进行音量调节 Perfect Hotkey允许您指定您希望控制系统音频的任何热键.默认情况下,您可以在安装Perfect Hotkey后使用CTRL + UP和CTRL + Down来调整音量. Perfect Hotkey同时支持以下热键任务: 打开网址 打开文件/文件夹 音量降低/升高 预制消息 关机电脑

java使用Sonic 算法对音频变速不变声、变调、调整音量

依赖库:https://github.com/waywardgeek/sonic 基础库:Sonic.java /* Sonic library Copyright 2010, 2011 Bill Cox This file is part of the Sonic Library. This file is licensed under the Apache 2.0 license. */ public class Sonic { private static final int SONIC_

Centos7.2安装后的简单调整

Centos7安装完成后做简单调整 1.安装必备的组件 yum install wget perl perl-devel net-tools kernel-devel (telnet可选性,我决定在其中一台安装就可以,我平时主要用于调试交换机) 2.安装开发工具  yum groupinstall 'Development tools' -y 3.安装epel和remi第三方软件源 yum install epel-release.noarch rpm -Uvh http://rpms.fami

linux下调整音量大小

不得不说,在linux下整音频和视频真是不容易.在windows中自带了关于音频和视频的工具,在linux下要两眼一抹黑地使用命令进行操作. 主要还是在linux下没找到合适的gui的调整工具. 几番搜索,找到一个调整音量大小的命令: amixer set Master 100% 命令执行之后会出来几行信息,刚开始还以为是报错,仔细一看不像错误信息,经验证确实可以调整音量. 经反查,这个命令由一个叫 alsa-utils 的提供.

Linux下ffmpeg的wav与amr相互转换

转载:http://blog.csdn.net/sanshipianyezi/article/details/78742621 转载:http://blog.csdn.net/szfhy/article/details/50441162 在linux下进行wav和amr的相互转换,如果是amr转为wav只需要ffmpeg即可 但是若wav转为amr则需要依赖ffmpeg和opencore_amrnb库. 完整下载地址:http://download.csdn.net/download/sansh

Android 音视频深入 十三 OpenSL ES 制作音乐播放器,能暂停和调整音量(附源码下载)

项目地址https://github.com/979451341/OpenSLAudio OpenSL ES 是基于NDK也就是c语言的底层开发音频的公开API,通过使用它能够做到标准化, 高性能,低响应时间的音频功能实现方法. 这次是使用OpenSL ES来做一个音乐播放器,它能够播放m4a.mp3文件,并能够暂停和调整音量 播放音乐需要做一些步骤1.创建声音引擎 首先创建声音引擎的对象接口 result = slCreateEngine(&engineObject, 0, NULL, 0,

简单的音量放大

花满楼原创 小白:音量设置?按几下音量按键就好啦! 花满楼:这种办法是全局的音量控制方式,现在是直接改音频数据,来做到音量的变化控制. 本文介绍直接更改pcm值,以达到能量控制. 大体的思路是这样的,先解码音频文件,得到pcm文件,再运算pcm文件,最后把pcm文件编码成aac. 重点讲解的部分是pcm文件的运算,解码与编码部分可以参考之前的文章来写代码完成,这里直接用ffmpeg的命令行来完成编解码. 先看整体代码,再做解释: #include <stdio.h> #include <

超简单调整Fedora25遇到的字体小问题——字体渲染问题和输入框内容显示不全

第一个问题:字体渲染 抗锯齿效果很不舒服.如图: 锯齿很明显.解决方法,使用gnome-tweak-tool(中文名:优化工具)如果没有,请安装: dnf install -y gnome-tweak-tool 安装好之后,打开,选择Fonts(字体)--将微调和抗锯齿,修改成如图内容: 然后关闭之前打开的窗口,再重新打开,即可.效果如图: 第二个问题: 不是很容易被发现的小bug:某些输入框内容显示不全,比如使用vbox的时候有的输入框内不能完全显示输入内容,如图,注意加减号旁边应该显示输入的