- 浏览: 316686 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
a455642158:
xiajy 写道他妈的都该名字了,更可恶的金山手机助手是:sj ...
解决ADB server didn't ACK问题 -
wwt455653509:
关闭tadb.exe,重启eclipse搞定
解决ADB server didn't ACK问题 -
Frederic:
感谢,真是帮了大忙!腾讯
解决ADB server didn't ACK问题 -
xiajy:
他妈的都该名字了,更可恶的金山手机助手是:sjk_daemon ...
解决ADB server didn't ACK问题 -
xiaofeilv321:
赞同
解决ADB server didn't ACK问题
先看关于wav文件的头信息
下面是封装好的一个辅助类。用于生成头部信息。
下面是封装好的一个辅助类。用于生成头部信息。
package example.audiotest; import java.io.ByteArrayOutputStream; import java.io.IOException; /** * * @author cninjazh * WavHeader辅助类。用于生成头部信息。 * WAV标准,头部应该是44字节 */ public class WaveHeader { public final char fileID[] = { 'R', 'I', 'F', 'F' }; public int fileLength; public char wavTag[] = { 'W', 'A', 'V', 'E' }; public char fmtHdrID[] = { 'f', 'm', 't', ' ' }; public int fmtHdrLeth; public short formatTag; public short channels; public int samplesPerSec; public int avgBytesPerSec; public short blockAlign; public short bitsPerSample; public char dataHdrID[] = { 'd', 'a', 't', 'a' }; public int dataHdrLeth; /* * pre-define wave header for 256kbps, 16bit, 16kHz, 1(mono), pcm * 填入参数,比特率等等。这里用的是16位单声道 16000Hz * fileLength = 内容的大小(dataSize) + 头部字段的大小(不包括前面4字节的标识符RIFF以及fileLength本身的4字节) * avgBytesPerSec = 8bit/16bit、11kHz/16kHz的WAV流进行传输(最大流量为16*16=256kbps=32KB/s) */ public WaveHeader(int dataSize) { fileLength = dataSize + (44 - 8); fmtHdrLeth = 16; bitsPerSample = 16; channels = 1; formatTag = 0x0001; samplesPerSec = 16000; blockAlign = (short) (channels * bitsPerSample / 8); avgBytesPerSec = blockAlign * samplesPerSec; dataHdrLeth = dataSize; } public WaveHeader(int dataSize, short bitsPerSample, int samplesPerSec) { fileLength = dataSize + (44 - 8); fmtHdrLeth = 16; this.bitsPerSample = bitsPerSample; channels = 1; formatTag = 0x0001; this.samplesPerSec = samplesPerSec; blockAlign = (short) (channels * bitsPerSample / 8); avgBytesPerSec = blockAlign * samplesPerSec; dataHdrLeth = dataSize; } public byte[] getHeader() throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); /* * ①RIFF WAVE Chunk ================================== | |所占字节数| 具体内容 | ================================== | ID | 4 Bytes | 'RIFF' | ---------------------------------- | Size | 4 Bytes | | ---------------------------------- | Type | 4 Bytes | 'WAVE' | ---------------------------------- */ WriteChar(bos, fileID);//以RIFF作为标识 WriteInt(bos, fileLength);//size,该size的大小是整个WAVE文件大小减去8个字节 WriteChar(bos, wavTag);//Type字段,为"WAVE"表示是Wav文件 /* * ②Format Chunk ==================================================================== | | 字节数 | 具体内容 | ==================================================================== | ID | 4 Bytes | 'fmt ' | -------------------------------------------------------------------- | Size | 4 Bytes | 数值为16或18,18则最后又附加信息 | -------------------------------------------------------------------- ---- | FormatTag | 2 Bytes | 编码方式,一般为0x0001 | | -------------------------------------------------------------------- | | Channels | 2 Bytes | 声道数目,1--单声道;2--双声道 | | -------------------------------------------------------------------- | | SamplesPerSec | 4 Bytes | 采样频率 | | -------------------------------------------------------------------- | | AvgBytesPerSec| 4 Bytes | 每秒所需字节数 | |===> WAVE_FORMAT -------------------------------------------------------------------- | | BlockAlign | 2 Bytes | 数据块对齐单位(每个采样需要的字节数) | | -------------------------------------------------------------------- | | BitsPerSample | 2 Bytes | 每个采样需要的bit数 | | -------------------------------------------------------------------- | | | 2 Bytes | 附加信息(可选,通过Size来判断有无) | | -------------------------------------------------------------------- ---- */ WriteChar(bos, fmtHdrID);//以"fmt "作为标识 WriteInt(bos, fmtHdrLeth);//一般长度为16个字节,如果是18个字节则有附加信息,写在最后两个字节上 WriteShort(bos, formatTag); WriteShort(bos, channels); WriteInt(bos, samplesPerSec); WriteInt(bos, avgBytesPerSec); WriteShort(bos, blockAlign); WriteShort(bos, bitsPerSample); WriteChar(bos, dataHdrID); WriteInt(bos, dataHdrLeth); bos.flush(); byte[] r = bos.toByteArray(); bos.close(); return r; } private void WriteShort(ByteArrayOutputStream bos, int s) throws IOException { byte[] mybyte = new byte[2]; mybyte[1] = (byte) ((s << 16) >> 24); mybyte[0] = (byte) ((s << 24) >> 24); bos.write(mybyte); } private void WriteInt(ByteArrayOutputStream bos, int n) throws IOException { byte[] buf = new byte[4]; buf[3] = (byte) (n >> 24); buf[2] = (byte) ((n << 8) >> 24); buf[1] = (byte) ((n << 16) >> 24); buf[0] = (byte) ((n << 24) >> 24); bos.write(buf); } private void WriteChar(ByteArrayOutputStream bos, char[] id) { for (int i = 0; i < id.length; i++) { char c = id[i]; bos.write(c); } } }
发表评论
-
RSS
2011-05-05 10:18 0RSS手机阅读 -
checkout lwuit源代码
2010-12-07 16:22 1253步骤一:安装SVN 步骤二:去 LWUIT 官网免费注册一个 ... -
wave混音的实现(2)
2010-11-11 20:43 2416关于混音算法,参考的是http://jacky-zhang.i ... -
混音算法
2010-11-11 20:41 4984一、最简单的混音算法 现在一般的软件混音算法是对输入的音频数据 ... -
直接通过链接打开模拟器
2010-03-30 22:13 1068提示:需要JDK1.5 或以上支持 在jad的url之前添加 ... -
j2me优化秘密
2008-04-25 13:36 1742以下是经验总结: *只优化需要的代码 *只在有价值的地方优化 ... -
j2me图片任意角度翻转算法
2008-04-24 13:56 1301import javax.microedition.lcdui ... -
OpenBaseMovil
2008-04-17 11:05 1537http://www.openbasemovil.org/do ... -
Forum_Nokia_Technical_Library_v1_30_en(chm)
2008-04-16 16:13 1164Forum Nokia Technical Library ... -
mwt
2008-04-10 13:16 1522自己写了一个demo及一些练习 -
Different platform, different keycodes
2008-04-03 09:55 1589package opusmicro.keycode.tes ... -
floggy
2008-03-27 14:31 1332As J2ME developers we couldn't ... -
Canvas翻页效果
2008-03-26 16:01 2673仅供交流学习 -
Canvas下调用输入法
2008-03-26 15:45 2419示例程序。 -
J2ME中文的支持问题
2008-03-11 14:41 1491在使用MotoJ2SDK进行J2ME应用程序的开发,经常会遇到 ... -
camera support
2008-03-11 12:48 1504microedition.platform 平台名称,如j ... -
keycodes on different devices
2008-03-11 11:50 1177Device UP DOWN LEFT RIG ... -
各品牌手机键值
2008-03-11 11:48 2353原文(http://www.jum.cn/bbs/archiv ... -
A J2ME FAQ
2008-03-11 11:41 1805J2ME technologies What are the ... -
J2MEKNOWLEDGE
2008-01-24 18:46 1098example
相关推荐
这篇名为“wave混音的实现(2)”的博客文章可能是关于如何在编程中处理Wave格式的音频文件,进行混音操作的系列教程的第二部分。Wave(或WAV)是一种常见的无损音频文件格式,广泛用于专业音频编辑和制作。 混音,...
标题中的“可同时8个wave文件混音”指的是一个多媒体编程项目,它允许用户混合最多八个不同的WAV音频文件。WAV格式是Microsoft开发的一种无损音频文件格式,广泛用于存储高质量的声音数据。这个程序可能是为了音乐...
1. WAVEMIX.BAS:这是VB的源代码文件,其中包含了实现混音功能的算法和逻辑。开发者可以通过阅读这个文件来了解如何控制和操作音频流。 2. File_id.diz:通常是一个简短的描述文件,包含程序的作者、版本和简要说明...
标题中的“可同时8个wave文件混音(338KB)”表明这是一个关于音频处理的程序,能够同时对8个WAV格式的音频文件进行混音操作。WAV是无损音频格式,常用于专业音乐制作和编辑。这个程序可能是一个小巧的工具,其大小仅...
5. 使用Audio Repeater程序将Wave in选择为Line1虚拟音频设备,将Wave out选择为实际的声卡设备。 6. 点击Start,并打开录音机和你需要录制的音频文件进行录音。 使用Virtual Audio Cable可以实现混音内录的效果,...
"声卡不支持混音照样实现内录功能" 本文主要讲述了如何在不支持混音的声卡上实现内录功能。声卡厂商由于RIAA(Recording Industry Association of America,美国唱片工业联合会)的压力,对音频模块的功能做了限制...
除了基本的输入输出功能,wave底层接口还支持其他高级特性,如音频数据的混音、缓冲管理、同步和错误处理等。例如,开发者可以使用waveInPrepareHeader和waveInUnprepareHeader函数来准备和释放缓冲区,确保数据正确...
waveIn.WaveFormat = new WaveFormat(44100, 16, 1); // 设置录音采样率,位深度和声道数 ``` 为了实现混音功能,我们需要将多个音频流合并到一个流中。这可能涉及到多个麦克风输入或者其他音频源,如系统播放的...
针对这些问题,本文介绍了一种新的快速实时混音算法——非均匀波形收缩混音算法(Asymmetrical Wave-Shrinking, AWS),旨在提高混音质量的同时减少计算复杂度。 #### 现有混音算法存在的问题 现有的混音算法主要...
1. **MMSYS API**:这是Windows操作系统内置的一套多媒体处理接口,其中的waveOut和waveIn函数可以用于音频播放和录制。对于混音,我们可以使用waveOutWrite函数来控制各个音频源的播放,通过调整缓冲区中的数据,...
1. `mMixer.bas`:这可能是一个Basic语言编写的模块,用于混合音频信号或者控制音频设备的混音器设置。 2. `CMixer.cls`:这是可能定义了类的类库文件,可能包含了对waveOut API的封装,以及对音频设备的操作和管理...
在这个项目中,我们将深入探讨混音器编程的核心概念以及CMixer如何实现这些功能。 混音器(Mixer)是一个软件或硬件设备,它能够混合多个音频源,调整每个源的音量、平衡、声道等参数,并将它们输出为单一的音频流...
1. `waveOutOpen`:这个函数用于打开一个WaveOut设备。你需要指定一个设备ID,以及回调函数的指针,以便在音频播放过程中接收设备事件。此函数会返回一个句柄,后续的操作都将基于这个句柄进行。 2. `...
C1 Effect是C1 Compressor和C1 Gate功能的集成,还增加了侧链滤波器和独特的"Key Mode",可以实现复杂的音频处理,如嘶声消除和节奏强化。而C1-comp与C1类似,提供了预设方案,简化了用户的操作流程。 Waves的C4多...
通过理解和掌握上述知识点,开发者可以使用VC++有效地处理WAVE声音文件,实现各种音频应用,如录音、混音、音频分析等。实际编程中,还需要根据具体项目需求选择合适的API和策略,灵活运用这些技术。
6. **多轨混音**:在Cool Edit中,Wave插件还能支持多轨音频的混音操作,方便用户同时处理多个音频轨道,实现复杂的音频合成。 7. **自动化控制**:插件可能还包含自动化参数设置,允许用户根据时间线自定义音频...
同时,它的多轨混音功能让用户可以同时处理多个音轨,实现复杂的音乐编排和效果叠加。此外,软件内含大量的预设效果器,如均衡器、压缩器、混响、延迟等,以及可自定义的VST插件支持,让音色的塑造拥有无限可能。 ...
在本文中,我们将深入探讨如何在Visual Studio 2010...对于更复杂的需求,如音效处理、实时混音或跨平台支持,可以考虑使用专门的音频库。确保正确地将压缩包中的代码集成到你的项目中,以便有效地实现音频播放功能。
在`WaveOutDemo`项目中,你可能会看到类似这样的代码实现,通过NAudio库创建一个WinForms窗体,添加按钮控件来控制音频的播放、暂停和停止。通过这个简单的示例,你可以了解到如何在WinForms应用中利用`WaveOut`播放...
1. **Wave文件格式**:Wave(或称WAV)是Microsoft开发的一种无损音频格式,存储的是原始PCM(脉冲编码调制)数据,通常具有较大的文件体积。这种格式能够保持音频的质量,但不适合在互联网上分享或存储大量音乐。 ...