- 浏览: 316726 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
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问题
关于混音算法,参考的是http://jacky-zhang.iteye.com/blog/766053,下面是具体的实现逻辑
package example.audio; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import javax.microedition.io.Connector; import javax.microedition.io.HttpConnection; import javax.microedition.io.file.FileConnection; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.media.Manager; import javax.microedition.media.MediaException; import javax.microedition.media.Player; import javax.microedition.media.PlayerListener; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; public class Mixing2 extends MIDlet implements CommandListener{ private Command play1 = new Command("Play one", Command.OK, 0); private Command play2 = new Command("Play two", Command.OK, 1); private Command play3 = new Command("Play three", Command.OK, 6); private Command stop1 = new Command("Stop one", Command.CANCEL, 2); private Command stop2 = new Command("stop two", Command.CANCEL, 3); private Command stop3 = new Command("stop three", Command.CANCEL, 7); private Command playMix = new Command("play mix", Command.OK, 4); private Command stopRecord = new Command("stop record", Command.OK, 5); private Player player1; private Player player2; private Player player3; private Player player4; private String[] urls = {"/128kbps/intwap-5.wav","/128kbps/intwap-6.wav","/128kbps/intwap-7.wav"}; private Form form = new Form("Test mixing"); private byte[][] data = new byte[3][]; private int[][] times = new int[3][]; private long startTime = 0; private long size; private int idx1 = 0; private int idx2 = 0; private int idx3 = 0; private static final int FIRST = 1; private static final int SECOND = 2; private static final int THIRD = 3; private boolean start = false; public Mixing2() {} protected void destroyApp(boolean arg0) throws MIDletStateChangeException { } protected void pauseApp() { } protected void startApp() throws MIDletStateChangeException { form.addCommand(play1); form.addCommand(stop1); form.addCommand(play2); form.addCommand(stop2); form.addCommand(play3); form.addCommand(stop3); form.addCommand(playMix); form.addCommand(stopRecord); form.setCommandListener(this); Display.getDisplay(this).setCurrent(form); } public void commandAction(Command arg0, Displayable arg1) { if (arg0 == play1) { form.append("play one"); if(startTime == 0) startTime = System.currentTimeMillis(); new Thread(){ public void run() { try { stopPlayer1(); (player1 = initPlayer(FIRST)).start(); } catch (MediaException e) { e.printStackTrace(); } } }.start(); System.out.println("player1.start.time: "+System.currentTimeMillis()); } else if (arg0 == stop1) { stopPlayer1(); } else if (arg0 == play2) { form.append("play two"); if(startTime == 0) startTime = System.currentTimeMillis(); new Thread(){ public void run() { try { stopPlayer2(); (player2 = initPlayer(SECOND)).start(); } catch (MediaException e) { e.printStackTrace(); } } }.start(); } else if (arg0 == stop2) { stopPlayer2(); } else if (arg0 == play3) { form.append("play three"); if(startTime == 0) startTime = System.currentTimeMillis(); new Thread(){ public void run() { try { stopPlayer3(); (player3 = initPlayer(THIRD)).start(); } catch (MediaException e) { e.printStackTrace(); } } }.start(); } else if (arg0 == stop3) { stopPlayer3(); } else if (arg0 == playMix) { new Thread(){ public void run() { try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); byte[] data = mixing(); System.out.println("combine.................data "+data.length); try { bos.write(new WaveHeader(data.length, (short)16, 8000).getHeader()); bos.write(data); } catch (IOException e) { e.printStackTrace(); } System.out.println("ready....stop....player........ "); stopPlayer4(); System.out.println("ready....mix....player........ "); player4 = Manager.createPlayer(new ByteArrayInputStream(bos.toByteArray()), "audio/x-wav"); player4.prefetch(); player4.realize(); player4.start(); } catch (IOException e) { e.printStackTrace(); } catch (MediaException e) { e.printStackTrace(); } System.out.println("playing.........mix.......data "); for(int i=0;i<times.length;i++){ times[i] = null; } startTime = 0; idx1 = idx2 = idx3 = 0; }; }.start(); } else if (arg0 == stopRecord) { stopPlayer1(); stopPlayer2(); stopPlayer3(); System.gc(); } } private void saveToDisk(){ // FileConnection file = (FileConnection)Connector.open("file://localhost/" + ); } private byte[] mixing(){ size = (System.currentTimeMillis() - startTime) * 16; long start = System.currentTimeMillis(); byte[] mixData = new byte[(int) size]; byte[][] mixPices = new byte[times.length][]; System.out.println("111111111111: "+size); for(int i=0; i< times.length;i++){ if(times[i]==null) continue; mixPices[i] = new byte[(int) size]; int length = data[i].length-44; for(int j =0; j<times[i].length;j++){ if(times[i][j]==0)break; System.out.println("player"+i+".time: "+times[i][j]); if((j+1)%2==0)System.out.println((times[i][j]-times[i][j-1])); if((j+1)%2==0) { int max = times[i][j]-times[i][j-1]; for (int k = 44; k < max; k++){ if(k >= length) break; mixPices[i][(int) times[i][j-1]+k-44] = data[i][k]; } } } } System.out.println("999999999999: "+(System.currentTimeMillis() - start)); double f = 1.0f; int MAX = 127, MIN = -127; double STEPSIZE; for(int m=0;m<mixData.length;m++){ mixData[m] = 0; double temp = 0; for(int n =0;n<mixPices.length;n++){ if(mixPices[n]==null) continue; temp += mixPices[n][m]; } if(temp==0) continue; temp = temp * f; if(temp>MAX){ double f0 = 127.0f/temp; f = f0; temp = MAX; } else if(temp < MIN){ double f0 = -127.0f/temp; f = f0; temp = (byte) MIN; } if(f<1) { STEPSIZE = ((1.0f-f)/16); f += STEPSIZE; } mixData[m] = (byte) temp; } for(int n =0;n<mixPices.length;n++){ mixPices[n] = null; } mixPices = null; System.out.println("mix cost time: "+(System.currentTimeMillis()-start)); return mixData; } private Player initPlayer(int p){ byte[] temp = null; PlayerListener plistener = null; if( p == FIRST) { if (data[0]==null) { data[0] = getWaveData(urls[0]); } temp = data[0]; plistener = p1; } else if(p==SECOND) { if(data[1]==null){ data[1] = getWaveData(urls[1]); } temp = data[1]; plistener = p2; } else if(p==THIRD) { if(data[2]==null){ data[2] = getWaveData(urls[2]); } temp = data[2]; plistener = p3; } Player player = null; try { InputStream is = new ByteArrayInputStream(temp); player = Manager.createPlayer(is, "audio/x-wav"); player.prefetch(); player.realize(); player.addPlayerListener(plistener); // player.setLoopCount(-1); } catch (MediaException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } return player; } private void stopPlayer1(){ if(player1!=null && player1.getState() != Player.CLOSED){ form.append("stop one"); try { player1.stop(); player1.close(); player1 = null; // System.gc(); } catch (MediaException e) { e.printStackTrace(); } } } private void stopPlayer2(){ if(player2!=null && player2.getState() != Player.CLOSED){ form.append("stop two"); try { player2.stop(); player2.close(); player2 = null; // System.gc(); } catch (MediaException e) { e.printStackTrace(); } } } private void stopPlayer3(){ if(player3!=null && player3.getState() != Player.CLOSED){ form.append("stop three"); try { player3.stop(); player3.close(); player3 = null; // System.gc(); } catch (MediaException e) { e.printStackTrace(); } } } private void stopPlayer4(){ if(player4!=null && player4.getState() != Player.CLOSED){ form.append("stop mix"); try { player4.stop(); player4.close(); player4 = null; // System.gc(); } catch (MediaException e) { e.printStackTrace(); } } } PlayerListener p1 = new PlayerListener(){ public void playerUpdate(Player arg0, String arg1, Object arg2) { if(arg1.equals(PlayerListener.END_OF_MEDIA)){ System.out.println("end of media"); // System.out.println(System.currentTimeMillis()); times[0][idx1] = (int) ((System.currentTimeMillis() - startTime) * 16); idx1++; System.out.println(" player1.cost.time: "+arg0.getMediaTime()); } else if(arg1.equals(PlayerListener.STOPPED)){ System.out.println("stopped"); times[0][idx1] = (int) ((System.currentTimeMillis() - startTime) * 16); idx1++; // System.out.println(System.currentTimeMillis()); } else if(arg1.equals(PlayerListener.STARTED)){ System.out.println("started"); if(times[0] == null) times[0] = new int[100]; times[0][idx1] = (int) ((System.currentTimeMillis() - startTime) * 16); idx1++; System.out.println(System.currentTimeMillis()); } } }; PlayerListener p2 = new PlayerListener(){ public void playerUpdate(Player arg0, String arg1, Object arg2) { if(arg1.equals(PlayerListener.STARTED)){ System.out.println("started"); if(times[1] == null) times[1] = new int[100]; times[1][idx2] = (int) ((System.currentTimeMillis() - startTime) * 16); idx2++; // System.out.println(System.currentTimeMillis()); } else if(arg1.equals(PlayerListener.STOPPED)){ System.out.println("stopped"); times[1][idx2] = (int) ((System.currentTimeMillis() - startTime) * 16); idx2++; // System.out.println(System.currentTimeMillis()); } else if(arg1.equals(PlayerListener.END_OF_MEDIA)){ System.out.println(player2.getState()); times[1][idx2] = (int) ((System.currentTimeMillis() - startTime) * 16); idx2++; } } }; PlayerListener p3 = new PlayerListener(){ public void playerUpdate(Player arg0, String arg1, Object arg2) { if(arg1.equals(PlayerListener.STARTED)){ System.out.println("started"); if(times[2] == null) times[2] = new int[100]; times[2][idx3] = (int) ((System.currentTimeMillis() - startTime) * 16); idx3++; // System.out.println(System.currentTimeMillis()); } else if(arg1.equals(PlayerListener.STOPPED)){ System.out.println("stopped"); times[2][idx3] = (int) ((System.currentTimeMillis() - startTime) * 16); idx3++; // System.out.println(System.currentTimeMillis()); } else if(arg1.equals(PlayerListener.END_OF_MEDIA)){ System.out.println(player3.getState()); times[2][idx3] = (int) ((System.currentTimeMillis() - startTime) * 16); idx3++; } } }; private byte[] getWaveData(String url){ ByteArrayOutputStream bos = new ByteArrayOutputStream(); InputStream is = getClass().getResourceAsStream(url); // int m = 0; byte[] d = new byte[2048]; while(true){ try { int t = is.read(d); // m = is.read(); if(t==-1) break; bos.write(d); } catch (IOException e) { e.printStackTrace(); } } byte[] data = bos.toByteArray(); System.out.println(data.length); try { is.close(); bos.close(); } catch (IOException e) { e.printStackTrace(); } return data; } }
- 128kbps.rar (1.3 MB)
- 下载次数: 61
发表评论
-
RSS
2011-05-05 10:18 0RSS手机阅读 -
checkout lwuit源代码
2010-12-07 16:22 1253步骤一:安装SVN 步骤二:去 LWUIT 官网免费注册一个 ... -
混音算法
2010-11-11 20:41 4985一、最简单的混音算法 现在一般的软件混音算法是对输入的音频数据 ... -
wave混音的实现(1)
2010-11-11 20:36 2236先看关于wav文件的头信息 下面是封装好的一个辅助类。用于生 ... -
直接通过链接打开模拟器
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
相关推荐
标题中的“可同时8个wave文件混音”指的是一个多媒体编程项目,它允许用户混合最多八个不同的WAV音频文件。WAV格式是Microsoft开发的一种无损音频文件格式,广泛用于存储高质量的声音数据。这个程序可能是为了音乐...
标题中的“可同时8个Wave文件混音”指的是一个VB(Visual Basic)编程项目,它具有混合多个Wave音频文件的能力。Wave文件是音频文件的一种常见格式,通常用于存储高质量的声音数据。这个程序允许用户将8个不同的Wave...
标题中的“可同时8个wave文件混音(338KB)”表明这是一个关于音频处理的程序,能够同时对8个WAV格式的音频文件进行混音操作。WAV是无损音频格式,常用于专业音乐制作和编辑。这个程序可能是一个小巧的工具,其大小仅...
声卡不支持混音样实现内录功能归纳 在本文中,我们将讨论声卡不支持混音样实现内录功能的原因和解决方法。声卡厂商迫于RIAA的压力,对音频模块的功能进行了限制,无法直接实现混音和内录的功能。针对此问题,我们...
知识点2:实现内录的方法 要想在不支持混音的声卡上实现内录,比较切实可行的方法有两个。第一种方法是直接使用一根两端都是公头的音频线将笔记本的MIC和耳机接口连接,实现内录。但是这种方法有其局限性,无法从...
除了基本的输入输出功能,wave底层接口还支持其他高级特性,如音频数据的混音、缓冲管理、同步和错误处理等。例如,开发者可以使用waveInPrepareHeader和waveInUnprepareHeader函数来准备和释放缓冲区,确保数据正确...
针对这些问题,本文介绍了一种新的快速实时混音算法——非均匀波形收缩混音算法(Asymmetrical Wave-Shrinking, AWS),旨在提高混音质量的同时减少计算复杂度。 #### 现有混音算法存在的问题 现有的混音算法主要...
在本文中,我们将深入探讨如何使用C#编程语言在Windows Forms环境下实现麦克风混音录制并保存为MP3格式的本地文件。C#是Microsoft开发的一种面向对象的编程语言,广泛应用于桌面应用开发,包括多媒体应用程序。...
本实例“控制混音效果”专注于讲解如何在VC++环境中实现混音功能,这对于初学者,尤其是进行课程设计的菜鸟来说,是非常实用的学习资源。 混音是将多个音频信号合并成一个单一输出的过程,它涉及到音量调整、声相...
2. `CMixer.cls`:这是可能定义了类的类库文件,可能包含了对waveOut API的封装,以及对音频设备的操作和管理。 3. `fmain.frm` 和 `fmain.frx`:这通常是VB(Visual Basic)应用程序的主窗体文件和资源文件,用于...
2. **音量控制**:音量控制是混音器的基本功能。CMixer允许用户独立地调整每个音频源的音量,这涉及到数字信号处理中的增益控制。增益控制可以改变信号的幅度,从而改变音量,同时还需要考虑到防止音频失真。 3. **...
2. `waveOutPrepareHeader`:在开始播放前,需要先准备Wave格式的数据块。这个函数将Wave数据包与设备关联起来,确保数据可以正确传输到声卡。 3. `waveOutWrite`:此函数用于将准备好的Wave数据发送到声卡进行播放...
通过理解和掌握上述知识点,开发者可以使用VC++有效地处理WAVE声音文件,实现各种音频应用,如录音、混音、音频分析等。实际编程中,还需要根据具体项目需求选择合适的API和策略,灵活运用这些技术。
6. **多轨混音**:在Cool Edit中,Wave插件还能支持多轨音频的混音操作,方便用户同时处理多个音频轨道,实现复杂的音频合成。 7. **自动化控制**:插件可能还包含自动化参数设置,允许用户根据时间线自定义音频...
同时,它的多轨混音功能让用户可以同时处理多个音轨,实现复杂的音乐编排和效果叠加。此外,软件内含大量的预设效果器,如均衡器、压缩器、混响、延迟等,以及可自定义的VST插件支持,让音色的塑造拥有无限可能。 ...
在本文中,我们将深入探讨如何在Visual Studio 2010...对于更复杂的需求,如音效处理、实时混音或跨平台支持,可以考虑使用专门的音频库。确保正确地将压缩包中的代码集成到你的项目中,以便有效地实现音频播放功能。
在`WaveOutDemo`项目中,你可能会看到类似这样的代码实现,通过NAudio库创建一个WinForms窗体,添加按钮控件来控制音频的播放、暂停和停止。通过这个简单的示例,你可以了解到如何在WinForms应用中利用`WaveOut`播放...
- `Wav2Mp3.cpp`: 实现了Wave文件到MP3的转换逻辑。 - `lame_enc.def`: 定义了DLL(动态链接库)导出的函数。 - `lame_enc.dll`: LAME编码器的动态库文件,供应用程序调用。 - `lame_enc.doc`: 可能包含了LAME...
C1 Effect是C1 Compressor和C1 Gate功能的集成,还增加了侧链滤波器和独特的"Key Mode",可以实现复杂的音频处理,如嘶声消除和节奏强化。而C1-comp与C1类似,提供了预设方案,简化了用户的操作流程。 Waves的C4多...