Articles of 音频

连接两个音频文件并播放生成的文件

我真的面临过去几天的问题,但我无法find确切的解决方案,请帮助我。 我想合并两个.mp3或任何音频文件,并播放最后一个单一的mp3文件。 但是,当我合并两个文件时,最终的文件大小是可以的,但是当我尝试播放它只是播放第一个文件时,我已尝试使用SequenceInputStream或字节数组但我无法得到确切的结果请帮助我。 我的代码如下: public class MerginFileHere extends Activity { public ArrayList audNames; byte fileContent[]; byte fileContent1[]; FileInputStream ins,ins1; FileOutputStream fos = null; String combined_file_stored_path = Environment .getExternalStorageDirectory().getPath() + “/AudioRecorder/final.mp3”; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); audNames = new ArrayList(); String file1 = Environment.getExternalStorageDirectory().getPath() + “/AudioRecorder/one.mp3”; String file2 […]

将两个音频流混合到android中的单个音频流中?

我试图混合两个音频流来获得单个输出流是否有可能在Android? 在我的例子中,我有一个来自麦克风的输入流,即我正在使用AudioRecord录制用户语音。 我想将这个录音与一个简短的声音片段混合,然后创建一个新流,它是两个流的混合,然后通过数据报套接字发送。 我已经研究了很多,这就是我所知道的。 首先,SoundPool可以帮助我实现目标,但我认为我不能提供麦克风作为输入源。 目前,我将记录从MIC保存在缓冲区中,然后通过数据报套接字进行流式传输。 我以为我可以将声音片段保存在另一个缓冲区中,然后添加两个缓冲区(我知道这是一个愚蠢的想法,因为我必须管理各种声音属性)。 也可能是我可以将录音从麦克风保存到文件并将声音片段录制到不同的文件并混合它们,但我想我不能这样做,因为我试图通过数据报套接字流式传输录音。 我认为使用Java的声音API可以实现我想要实现的目标。 但Android不支持它。 总而言之,我想要实现的目标是在基于VoIP(SIP)的呼叫中注入声音效果(声音效果就像蟋蟀声音和我的声音一样)。 我希望我对我的问题做了明确的解释。 问题1:我怎样才能做到这一点? 问题2:我可以使用Java的Sound API创建一个JAR文件并在我的项目中使用它吗? (关于这一点,我认为这是不可能的) 以下是我的录音和音频播放的一些代码。 这是我的录音代码: public void run() { // TODO Auto-generated method stub try{ int minbuffer = AudioRecord.getMinBufferSize(sample, config, format); DatagramSocket socket = new DatagramSocket(); Log.d(TAG, “Socket Created”); socket.setBroadcast(true); byte[] ubuff = new byte[minbuffer]; DatagramPacket packet; Log.d(TAG, “Packet Created”); InetAddress dest […]

注册为音乐播放器并播放歌曲

我正在创建一个音乐播放器应用程序,我想将该应用程序注册为音乐播放器。 因此,当用户点击要播放的任何歌曲时,我的应用程序应被建议为音乐播放器之一。 我按照这个指南 。 在manifest.xml中添加必要的代码后,它只在建议中显示我的应用程序。 当我选择我的应用程序时,什么也没有播放。 我认为在主要活动中应该有类似接收器的东西来接收播放所选歌曲的媒体路径。 但我不知道如何实现这一点。 我已将以下代码添加到manifest.xml中(供参考):

Soundpool加载声音名称’OMX.qcom.audio.decoder.aac’的组件已经存在,忽略了这个

我已经在后台的Application onCreate方法中实现了加载所有声音。 但是,当我加载声音时,它会给出如下错误: E / OMXMaster:名称为“OMX.qcom.audio.decoder.aac”的组件已经存在,忽略了这个组件。 这有什么问题? 有人有什么想法吗? 提前致谢 private void loadAllSounds() { new Thread(new Runnable() { @Override public void run() { soundPool.load(appContext, R.raw.compose_sound_0, 1); soundPool.load(appContext, R.raw.compose_sound_1, 1); soundPool.load(appContext, R.raw.compose_sound_2, 1); soundPool.load(appContext, R.raw.compose_sound_3, 1); } }).start(); }

每N毫秒播放一次声音

我正在开发一个节拍器应用程序。 用户可以在运行时选择bpm,我的应用程序将相应地播放“tick”声音。 “tick”是单个节拍器“shot”(mp3)。 我尝试使用Handler和MediaPlayer实现它,但节拍器根本不精确。 所以我想改变整个方法:当用户选择一个新的bpm值时,我通过每N毫秒重复一次嘀嗒声X次来合成一个新的声音,然后循环这个运行时创建的声音。 这是一个有效的选择吗? 如何在Android中实现?

如何通过音频插孔检测输入数据?

我知道一些设备耳机端口(可能全部?这里的任何参考都很好)有3个声道,用于立体声和麦克风。 所以我想知道是否有可能在这些设备上检测到这样的踏板 。 如果可能,使用录音机就足够了吗? 我正在研究应用程序的可能性,如果可能的话,这听起来很有希望。 谢谢 编辑 我正在寻找更多关于它的信息,我想知道踏板是否会与带按钮的耳机具有相同的效果。 覆盖它们的效果是致命的,我创建了一个简单的应用程序来完成它,现在我正在等待我的踏板尝试。 有什么想法吗? UPDATE 我只是在踏板上尝试过它并没有用。 虽然我们设法使用踏板暂停音乐应用程序。 该设备正在运行Cyanogen。 录音机也没有检测到按键上的任何内容。 需要有关如何检测它的建议:)。 UPDATE 随着赏金即将到期,一个小小的更新。 @ Nick.T提供的最后一个链接得到了一些有用的信息,但我仍然无法创建一个样本来检测踏板。 因此,我对标题问题进行了一些小改动,对此方向的任何指导都将非常感谢!

使用SoundPool播放声音

我需要在我的应用程序中播放一个简短的声音。 我写了下面的代码,但我的三星手机上没有声音和奇怪的振动。 但同时这段代码在我的android模拟器上运行良好。 我的代码是: package com.samplers; import android.app.Activity; import android.media.SoundPool; import android.media.AudioManager; import android.os.Bundle; import android.view.View; import android.widget.Button; public class FixVibroActivity extends Activity { /** Called when the activity is first created. */ private Button white; private SoundPool spool; private int soundID; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.setVolumeControlStream(AudioManager.STREAM_MUSIC); spool = new SoundPool(10, […]

无法兼容音频和video

我正在编写一个使用MediaCodec记录屏幕捕获和音频的应用程序。 我使用MediaMuxer来复用video和音频来创建mp4文件。 我成功地分别编写了video和音频,但是当我尝试将它们混合在一起时,结果出乎意料。 音频播放时没有video,或video播放后立即播放。 我的猜测是我对时间戳做错了,但我无法弄清楚到底是什么。 我已经看过这些例子: https : //github.com/OnlyInAmerica/HWEncoderExperiments/tree/audiotest/HWEncoderExperiments/src/main/java/net/openwatch/hwencoderexperiments和bigflake.com上的那些并且无法find回答。 这是我的媒体格式配置: mVideoFormat = createMediaFormat(); private static MediaFormat createVideoFormat() { MediaFormat format = MediaFormat.createVideoFormat( Preferences.MIME_TYPE, mScreenWidth, mScreenHeight); format.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface); format.setInteger(MediaFormat.KEY_BIT_RATE, Preferences.BIT_RATE); format.setInteger(MediaFormat.KEY_FRAME_RATE, Preferences.FRAME_RATE); format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, Preferences.IFRAME_INTERVAL); return format; } mAudioFormat = createAudioFormat(); private static MediaFormat createAudioFormat() { MediaFormat format = new MediaFormat(); format.setString(MediaFormat.KEY_MIME, “audio/mp4a-latm”); format.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectLC); format.setInteger(MediaFormat.KEY_SAMPLE_RATE, 44100); […]

OpenAL for CrossPlatform Development

OpenAL是一个令人困惑的项目,可以提取相关信息。 是否有正式的OpenAL? 什么是creativelabs控制项目? 我正在寻找一个跨平台音频库来支持IOS(iPhone,Ipads),Android,Windows和Linux。 OpenAL是否满足了这一需求? 什么是OpenAL的许可证? 虽然我们打算发布一些源代码,但由于许可证冲突,我们没有兴趣被迫使用。 有足够的证据表明我认为它正在Android相关链接( Android OpenAL? )以及谷歌搜索产生积极的结果。 我意识到Android已正式支持OpenSL。 然而,Android似乎是目前唯一支持OpenSL的平台,所以这不是一个选项。

在Android中获取音频文件持续时间的最佳方法是什么?

我正在使用SoundPool在我的应用程序中播放音频剪辑。 一切都很好,但我需要知道剪辑播放何时完成。 目前,我通过使用MediaPlayer实例获取每个剪辑的持续时间来在我的应用中跟踪它。 这工作正常,但加载每个文件两次看起来很浪费,只是为了得到持续时间。 我可以自己知道文件的长度(可从AssetFileDescriptor获得 )粗略计算持续时间,但我仍然需要知道采样率和通道数。 我看到了这个问题的两种可能解决方案: 弄清楚剪辑何时播放完毕(SoundClip似乎无法实现)。 有一个类可以只加载音频文件的标题,并给我采样率/通道数(理想情况下,样本计数,以获得确切的持续时间)。 有什么建议么? 谢谢,马克斯 我目前正在使用的代码(工作正常,但为此目的相当沉重): String[] fileNames = … MediaPlayer mp = new MediaPlayer(); for (String fileName : fileNames) { AssetFileDescriptor d = context.getAssets().openFd(fileName); mp.reset(); mp.setDataSource(d.getFileDescriptor(), d.getStartOffset(), d.getLength()); mp.prepare(); int duration = mp.getDuration(); // … } 在旁注中,这个问题已被提出但没有得到答案。