Articles of mp3

使用MediaPlayer,使用Android无法正确循环OGG文件

当试图循环MP3文件时,我的KitKat和Lollipop设备上存在非常小的差距,但在旧的Gingerbread手机上,循环之间的差距更加明显。 这足以让我为此做点什么…… 经过大量研究,我了解到MP3文件在文件的开头加了一点“填充”,因此,在循环时,它不会产生“干净循环”,这种效果在较旧/较慢时会更明显手机(显然)。 所以,我读到的建议是切换到使用OGG Vorbis文件。 它们没有任何空格/填充和“完美循环”。 然而,在尝试多次之后,我实际上使用OGG文件的结果比使用MP3更糟糕 – 但问题恰恰相反,即当循环应该回到OGG文件的开头时,它实际上似乎重新开始但是从它开始大约2或3秒(即没有’间隙’,它只是没有正确循环)。 我应该指出OGG文件本身似乎没问题,它们在Audacity中完美循环。 我正在使用2个MediaPlayer对象 – 一个用于介绍,一个用于主循环,介绍长度约为30秒,主循环长度约为3分钟。 我也是(对于JellyBean和更高级的设备),使用setNextMediaPlayer从intro转换到主循环 – 这可以正常工作(或者至少它在我测试它的两个设备上) – 并且用于pre JellyBean我正在onCompletitionListener回调方法中启动我的主循环 – 我只有一个pre-JB设备,但同样,转换似乎没问题)。 请注意它是否有帮助,但这里有一些代码,尽管问题似乎与Android MediaPlayer处理OGG Vorbis文件的方式有关。 我一直试图让这个循环正常工作近一个星期,所以希望有人之前遇到过这个并且可以对它进行一些说明。 public void setDataSource() { try { loopPlayer.reset(); loopPlayer.setDataSource(myContext, Uri.parse(“android.resource://com.me.myapp/” + R.raw.loop)); loopPlayer.prepare(); loopPlayer.setLooping(true); introPlayer.reset(); introPlayer.setDataSource(myContext, Uri.parse(“android.resource://com.me.myapp/” + R.raw.intro)); introPlayer.prepare(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { introPlayer.setNextMediaPlayer(loopPlayer); loopPlayer.setLooping(true); } introPlayer.setOnCompletionListener(this); } catch […]

如何在android中将音频文件的比特率更改为32kbps

我想压缩音频,并发现唯一的解决方案是使用ffmpeg。 我曾尝试使用FFMPEG for android。 它正在编译但仍然无法正常工作,我无法得到编译方式。 我不了解FFMPEG,我使用了Continuousaudiorecorder。

如何在android中以编程方式将音频.mp3转换为.m4a

我不想使用ffmpeg。 目前我能够使用mp4video复用m4a音频。 我希望添加mp3音频也需要mp3到m4a转换。我能够将wav转换为m4a而不是mp3转换为m4a,代码如下 这是我的代码。 private void convertAudio(String filename) throws IOException { String outputpath =Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getPath()+”/converted.m4a”; // Set up MediaExtractor to read from the source. MediaExtractor extractor = new MediaExtractor(); extractor.setDataSource(filename); int trackCount = extractor.getTrackCount(); // Set up MediaMuxer for the destination. MediaMuxer muxer; muxer = new MediaMuxer(outputpath, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4); // Set up the tracks. HashMap indexMap = […]

将一些声音数据添加到现有的mp3文件Android,lame encoder

所以,这就是mp3在android中从麦克风编码到文件的方式: private void startBufferedWrite(final File file) { new Thread(new Runnable() { @Override public void run() { output = null; try { output = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file))); while (mIsRecording) { int readSize = mRecorder.read(buffer, 0, buffer.length); if (readSize > 0) { int bytesEncoded = androidLame.encode(buffer, buffer, readSize, mp3buffer); if (bytesEncoded > 0) { try { […]

是否可以在Android的媒体元sqlite数据库上进行原始查询?

我正在写一个小应用程序来播放音乐。 我的目标是Android API等级7及以上。 该应用程序应该仅列出和播放已经由用户通过偏好选择的特定types集合标记的音乐,例如“Pop”,“Rock”,“Hillbilly”。 现在我正在尝试find一种有效的方法来查找包含用所选流派标记的曲目的所有专辑ID和专辑名称。 这在SQL中很容易。 手机将媒体元数据存储在sqlite数据库中。 我在手机的内部存储器上find它,通过adb复制它并尝试了一些sqlite查询。 生成的查询是一个带有连接链的SQL一行,它工作正常。 在使用Android SDK的Java中,这似乎更难,至少在API等级7及以上。 我可以在MediaStore上使用managedQuery在同一个底层数据库上执行一些有限的SQL语法,但是如果我理解正确,那么在使用此API时没有JOIN和DISTINCT。 我也可能忽略了这一点,但MediaStore允许我搜索一种types的所有曲目,但不能搜索单个查询中几种types的所有曲目。 所以这一切都在java中获得了一些手动工作。 该程序现在必须为每个types执行几个managedQuery()调用,并且程序必须加入结果并使它们与sqlite(此工作所属的)之外的java不同。 这真的是必须要做的吗? 有没有办法只是将原始查询发送到sqlite数据库文件? 谢谢!

Android等于iTunes Affiliate Program,流媒体音乐API和利润分享

与这些问题类似,但没有一个答案可行。 Android音乐会员/联营计划 关于Android应用音乐联盟计划的建议 背景:iTunes有一个联盟计划,为音乐下载提供货币化机会,因为iTunes已集成到iOS设备中,用户可以轻松地在设备上购买音乐。 还有30秒预览可用。 问题:在Android上这是有问题的。 写作的首要音乐商店:谷歌音乐和亚马逊MP3。 Google音乐不提供API,而亚马逊不允许使用其API的移动应用。 问题:是否有人有任何具有良好用户购买路线的联盟计划(或没有联盟但允许预览)的音乐流媒体服务的经验? 提前致谢。

从byte android转换后,Mp3文件没有播放

我只是将一个mp3文件转换为字节代码并将该字节代码重新转换为mp3并保存到sdcard,所有过程都成功进行但问题是保存的mp3文件没有在设备mp3播放器上播放它显示不支持的格式。 我的下面的代码有什么问题 private void convertBytesToFile(byte[] bytearray) { byte[] bytes = bytearray; String encoded = Base64.encodeToString(bytes, 0); // Utilities.log(“~~~~~~~~ Encoded: “, encoded); byte[] decoded = Base64.decode(encoded, 0); //Utilities.log(“~~~~~~~~ Decoded: “, Arrays.toString(decoded)); try { File file2 = new File(Environment.getExternalStorageDirectory() + “/hello-2.mp3”); FileOutputStream os = new FileOutputStream(file2, true); os.write(decoded); os.close(); } catch (Exception e) { Toast.makeText(this, “Somthing wrong”, […]

如何在Android内解码Android中的MP3?

我正在开发一款让用户选择MP3音频文件的应用程序。 然后我的应用程序处理该文件。 对于此处理,应用程序需要解码音频文件以获得原始PCM输出。 要解码MP3,我有两个选择: 使用Android系统解码MP3并获取PCM数据。 在手机上自己解码MP3,无需支付MP3许可费。 我的问题是#1在技术上是否可行? 对于#2,手机上的MP3许可证是否也涵盖了应用程序?

下载时播放mp3文件?

我希望我的Android应用程序从互联网上下载一个mp3文件,并在下载时像流一样播放。 这有可能吗? 我该怎么做呢? 基本上我希望用户能够立即收听文件,但是即使他停止收听也要继续下载到SD卡,因此整个mp3文件最终会以SD卡的forms出现。

从SD卡播放mp3声音

我的平板电脑SD卡上有一个名为“/Android/data/com.example.android.app/files”的目录。 我只是手动创建它,因为我不知道如何测试我的应用程序的这个方面。 我有一个存储在sqlite数据库中的文件名,如“/folder1/audio1.mp3”,“/ folder2 / audioio1.mp3”等…文件名相同,但是在不同的文件夹中,因为它们是相同的东西是不同的语言。 我有这些文件夹(folder1和folder2)以及SD卡上“/Android/data/com.example.android.app/files”目录中的所有mp3文件。 所以,我从数据库中获取文件名,然后我尝试使用以下命令访问SD卡上的文件夹: String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath() + “/Android/data/com.example.android.app/files”; 这基本上最终使路径“storage / Android / data / com.example.android.app / files”。 现在,我在早期开发期间在我的原始文件夹中有几个mp3文件,但最后会有太多文件留在该文件夹中,所以我开始调查从SD卡获取它们。 当我把它们放在原始的时候,我得到它们是这样的: rid = getResources().getIdentifier(filname, “raw”, “com.example.android.app”); 现在,使用SD卡上的文件,它将更改为: filename = “/folder1/audio.mp3” 而不是“原始”我有: “storage/Android/data/com.example.android.app/files” 并基本上像这样玩: AssetFileDescriptor afd = mContext.getResources().openRawResourceFd(rid); mMP.reset(); mMP.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength()); mMP.prepare(); mMP.start(); afd.close(); 然而,现在这种方法似乎都没有相同的方法。 你能从SD卡上的mp3文件中获取resourceid吗? 这对我来说甚至是合适的方式吗? 我是否应该采用不同的方式来播放它们,无论源是内部存储器还是外部存储器? 完全糊涂了。 编辑:我确实find了这可能会有所帮助…但它可能只有等式。 编辑2:我在这里看。 […]