录制成amr声音文件的实现代码

本文介绍了如何在Nokia手机上直接录制AMR声音文件,避免通过PCM格式转换。关键在于使用CMdaAudioRecorderUtility类,并在打开文件前使用CEikonEnv::Static()->FsSession().Replace(aFile,aFile)确保文件存在且清空。同时,避免调用SetPosition和CropL方法。" 84800025,4915097,2018-2019 ICPC比赛题解:算法解析与思路总结,"['算法', '数据结构', '程序设计竞赛', '线段树', '树状数组']
摘要由CSDN通过智能技术生成
 

如果你搜一下Nokia或NewLC论坛,会有很多问关于如何录制amr声音文件的帖子。首先让我们了解一下Nokia手机上常用的声音文件格式,一般的Nokia手机都会支持wav,midi,pcm,amr这几种文件格式。其中wav波形文件一般比较大,由于手机资源有限,它的使用范围不是很广。而midi和amr的存储格式则比较小,应用比较广泛;Nokia默认的录制的声音文件保存为amr格式。

需要熟悉的几个类:CMdaAudioPlayerUtility,CMdaAudioRecorderUtility和CMdaAudioConvertUtility。

以前有人说录制成amr文件需要先流成pcm格式,然后对得到的pcm数据进行转换后存盘;但最简单的方法还是直接录制成amr文件。哦,说了一堆乱七八糟的东西,忘了说心得了,其实也很简单。直接使用CMdaAudioRecorderUtility::OpenFileL()方法录制成amr文件是可以实现的,但在调用iMdaAudioRecorderUtility->OpenFileL(aFile);之前,需要加上CEikonEnv::Static()->FsSession().Replace(aFile,aFile)来确保aFile文件是存在的,并且现在里面没有数据。然后就是不要调用SDK例子里的iMdaAudioRecorderUtility->SetPosition(

TTimeIntervalMicroSeconds( 0 ) )和iMdaAudioRecorderUtility-

>CropL()。呵呵,简单吧!

下面是源代码:

//================&#

### 回答1: 在 Java 中可以使用 javax.sound.sampled 包中的类来录制和播放声音。不过,这个包并不支持将音频文件从一种格式转换为另一种格式。要想实现音频格式转换,需要使用第三方的音频处理库。 对于将 AMR 格式转换为 MP3 格式,可以使用 Apache Commons 项目中的 Apache Commons Sound 库。下面是一个简单的示例代码: ``` import org.apache.commons.sound.sampled.AudioFormat; import org.apache.commons.sound.sampling.AudioFileFormat; import org.apache.commons.sound.sampling.AudioInputStream; import org.apache.commons.sound.sampling.AudioSystem; import java.io.File; public class AmrToMp3 { public static void main(String[] args) throws Exception { // 输入文件 File inputFile = new File("input.amr"); // 输出文件 File outputFile = new File("output.mp3"); // 创建音频输入流 AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(inputFile); // 创建 MP3 格式的音频格式对象 AudioFormat mp3Format = new AudioFormat(AudioFormat.Encoding.MPEG2L3, audioInputStream.getFormat().getSampleRate(), audioInputStream.getFormat().getSampleSizeInBits(), audioInputStream.getFormat().getChannels(), audioInputStream.getFormat().getFrameSize(), audioInputStream.getFormat().getFrameRate(), true); // 创建音频输出流 AudioInputStream mp3InputStream = new AudioInputStream(audioInputStream, mp3Format, audioInputStream.getFrameLength()); // 写入文件 AudioSystem.write(mp3InputStream, AudioFileFormat.Type.MP3, outputFile); } } ``` 在运行这段代码之前,需要在项目中添加 Apache Commons Sound 库的依赖。具体的依赖信息可以在 Apache Commons Sound 库的官方文档中 ### 回答2: 要用Java代码AMR格式转换为MP3格式,可以使用第三方库LAME来实现。LAME是一个开源的音频编码器库,可以将AMR文件编码为MP3格式。 首先,你需要下载LAME库的Java绑定。在这个绑定中,你可以通过Java调用LAME库的函数来进行音频编码。 接下来,你需要用Java代码调用LAME库中的函数。具体的步骤如下: 1. 首先,你需要加载LAME库。使用System.loadLibrary()方法,将LAME库加载到Java虚拟机中。 2. 创建一个WavReader对象,用来读取AMR文件。你可以使用自己定义的WavReader类,或者使用其他开源库,如JAVE等。 3. 创建一个Mp3Writer对象,用来写入MP3文件。同样,你可以使用自己定义的Mp3Writer类,或者其他开源库。 4. 通过WavReader对象读取AMR文件中的音频数据,将其解码为PCM格式。解码过程可以使用LAME库中的lame_decode()函数完。 5. 将解码得到的PCM数据通过Mp3Writer对象编码为MP3格式。你可以使用LAME库中的lame_encode_buffer_interleaved_ieee_float()函数完。 6. 最后,将编码得到的MP3数据写入到目标文件中。 以下是伪代码示例: ```java // 加载LAME库 System.loadLibrary("lame"); // 创建WavReader对象 WavReader reader = new WavReader("input.amr"); // 创建Mp3Writer对象 Mp3Writer writer = new Mp3Writer("output.mp3"); // 创建缓冲区 byte[] amrBuffer = new byte[amrBufferSize]; float[] pcmBuffer = new float[pcmBufferSize]; // 解码AMR文件,并编码为MP3格式 int bytesRead = 0; int pcmSamples = 0; while ((bytesRead = reader.read(amrBuffer)) > 0) { pcmSamples = lame_decode(amrBuffer, bytesRead, pcmBuffer); lame_encode_buffer_interleaved_ieee_float(pcmBuffer, pcmSamples, mp3Buffer); writer.write(mp3Buffer); } // 关闭文件流 reader.close(); writer.close(); ``` 请注意,以上示例是伪代码,实际实现中需要根据具体情况进行调整。此外,你需要根据实际项目需求,对音频流数据进行适当的处理和错误处理。希望以上回答对你有帮助! ### 回答3: 要用Java代码实现AMR格式转换为MP3格式,我们可以使用第三方库lame进行转换。以下是一个简单的代码示例: 首先,你需要下载并导入lame库(lame-3.99.5.jar)到你的Java项目中。 接下来,你可以使用以下代码进行转换: ```java import com.googlecode.mp3transform.Decoder; import com.googlecode.mp3transform.Encoder; public class AMRToMP3Converter { public static void convertAMRtoMP3(String inputFilePath, String outputFilePath) { try { Decoder decoder = new Decoder(); Encoder encoder = new Encoder(); // 解码AMR文件 short[] pcm = decoder.decode(new File(inputFilePath)); // 编码为MP3文件 encoder.encode(pcm, pcm.length, new File(outputFilePath)); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { String inputFilePath = "input.amr"; String outputFilePath = "output.mp3"; convertAMRtoMP3(inputFilePath, outputFilePath); } } ``` 在上述代码中,我们首先创建了一个Decoder对象和一个Encoder对象。然后,我们使用Decoder的decode方法将AMR文件解码为PCM数据,并存储在一个short数组中。接下来,我们使用Encoder的encode方法将PCM数据编码为MP3文件。 你可以将AMR文件的路径和要输出的MP3文件的路径传递给convertAMRtoMP3方法以进行转换。 需要注意的是,上述代码仅仅是一个简单示例,实际应用中可能需要更多的参数配置和异常处理。此外,你需要确保导入了正确版本的lame库,并在运行代码之前设置正确的classpath。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值