У меня есть аналогичная проблема, которая действительно раздражает то, что это происходит в любое время, трудно воспроизвести точные условия, которые делают это возможным. Я только закрываю DDBB в методе ondestroy класса MainActivity. То, что я сделал, это добавить try / catch при каждом использовании db и добавить следующий catch, в этом случае он находится в середине цикла while, в других функциях я вызываю функцию снова один раз:
catch (SQLException e) {
e.printStackTrace();
Log.d(TAG, "MainService: error in AccSaveToDB with "+mainDB.getPath()+" in iteration "+j+". Closing and re-opening DB");
DBHelper.close();
mainDB.close();
j--;
}
И это в начале каждой функции, которая обращается к базе данных:
if (mainDB==null || !mainDB.isOpen()) {
DBHelper = DefSQLiteHelper.getInstance(getApplicationContext(), "Data.db", null, 1);
mainDB = DBHelper.getWritableDatabase();
}
До сих пор у меня до сих пор есть эта ошибка, я еще не мог понять причину, но по крайней мере, мое приложение не разбивается, и оно возобновляет то, что он должен делать. Я не вижу, удаляется ли файл, но эти решения работают для меня
Как Thomas Owens указал, просто связывание файлов оставит несколько заголовков ID3 рассеянными всюду по получающемуся составному файлу - таким образом, информация времени/скорости передачи будет дико неправильной.
Вы собираетесь должны использовать инструмент, который может объединить аудиоданные для Вас.
mp3wrap был бы идеален для этого - он разработан для объединений, файлы MP3, не будучи должен декодировать + повторно кодируют данные (который привел бы к потере качества звука), и будет также иметь дело с тегами ID3 разумно.
получающийся файл может также быть разделен назад в его составные части с помощью mp3splt инструмента - mp3wrap, добавляет информация к комментарию IDv3 для разрешения этого.
Проблема времени имеет отношение к заголовкам ID3 файлов MP3, который является чем-то, что Ваш метод не принимает во внимание, поскольку весь файл копируется.
у Вас есть предпочтительный язык, который Вы хотите использовать, или он не имеет значения? Это будет влиять на то, какие библиотеки доступны, которые поддерживают операции, которые Вы хотите.
Файлы MP3 имеют заголовки, которые необходимо уважать.
Вы могли эфир пользоваться библиотекой как Аудио Проект Библиотеки С открытым исходным кодом и писать инструмент вокруг этого. Или можно использовать инструмент, который понимает mp3 файлы как Смелость .
Как David говорит, , mp3wrap является способом пойти. Однако я нашел, что это не исправило аудио заголовок длины, таким образом, iTunes отказался играть целый файл даже при том, что все данные были там. (Я объединил три 7-минутных файла, но это только видело до первых 7 минут.)
я вскопал это сообщение в блоге , который объясняет, как зафиксировать это и также как скопировать теги ID3 из исходных файлов (самостоятельно, mp3wrap удаляет Ваши теги ID3). Или просто скопировать теги (использующий id3cp от id3lib), сделайте:
id3cp original.mp3 new.mp3
Лично я использовал бы что-то как mplayer с аудио передачей хотя опция, например, копия-oac
Я использовал бы Winamp, чтобы сделать это. Создайте плей-лист файлов, которые Вы хотите объединить в одного, выбрать Дисковый выходной плагин Писателя, выбрать имя файла, и Вы сделаны. Файл, который Вы получите, будет корректным файлом MP3, и можно установить скорость передачи и т.д.
Раньше я не слышал о mp3wrap. Выглядит отлично. Я предполагаю, что кто-то тоже где-то сделал это в графическом интерфейсе. Но, просто чтобы ответить на исходный пост, я написал графический интерфейс, который выполняет метод COPY / b. Итак, под покровом ничего нового под солнцем, но программа предназначена для того, чтобы сделать процесс менее болезненным, если у вас есть много файлов для слияния ... И вы не хотите перекодировать И каждый набор файлов для слияния одинаковый битрейт. Если он у вас есть (и вы работаете в Windows), проверьте Mp3Merge по адресу: http://www.leighweb.com/david/mp3merge и посмотрите, что вы ищете.
Используйте ffmpeg или аналогичный инструмент для преобразования всех ваших MP3-файлов в согласованный формат, например
ffmpeg -i originalA.mp3 -f mp3 -ab 128kb -ar 44100 -ac 2 intermediateA.mp3
ffmpeg -i originalB.mp3 -f mp3 -ab 128kb -ar 44100 -ac 2 intermediateB.mp3
Затем во время выполнения объедините ваши файлы вместе:
cat intermediateA.mp3 intermediateB.mp3 > output.mp3
Наконец, запустите их через инструмент MP3Val для исправления любых ошибок потока без принудительного полного перекодирования:
mp3val output.mp3 -f -nb
Instead of using the command line to do
copy /b 1.mp3+2.mp3 3.mp3
you could instead use "The Rename" to rename all the MP3 fragments into a series of names that are in order based on some kind of counter. Then you could just use the same command line format but change it a little to:
copy /b *.mp3 output_name.mp3
That is assuming you ripped all of these fragment MP3's at the same time and they have the same audio settings. Worked great for me when I was converting an Audio book I had in .aa to a single .mp3. I had to burn all the .aa files to 9 CD's then rip all 9 CD's and then I was left with about 90 mp3's. Really a pain in the a55.