cevap

3

Hayır, sen Visualizer API aracılığıyla elde edebilirsiniz çünkü aslında, tamamen doğru değil (hatta kendi uygulaması için, ses çıkışını almak için hiçbir API yoktur, ama bu kadar düşük kalitede olacaktır Bunun sizin için herhangi bir kullanım olacağını şüpheliyim).

Bu tür bir işlevsellik istiyorsanız bunu kendiniz uygulamak zorundasınız. Yani; sesleri oynatmaya başladığınızda, bunları karıştırın ve sonucu bir dosyaya da yazın. Sesler sıkıştırılmışsa, bunları kendiniz deşifre etmek zorundasınız. Bunu sen vermek istediğiniz biçimi ise yine kendi MP3 kodlayıcı temin etmesi gerekir böylece Android ile birlikte hiçbir MP3 kodlayıcı, var olduğunu

Not.

+0

Teşekkürler Michael - en iyi nereden başlayacağınız (belgeler, öğreticiler vb.) Herhangi bir fikrin var mı? Sesleri nasıl karıştıracağımı ve bir dosyaya nasıl yazacağımı bilmiyordum? – fxfuture

+0

En basit senaryo, tüm seslerinizin aynı örnek hızının, kanal sayısının, vb. ve temel bir katkı mikseri kullandınız. Karıştırmanız, o anda aktif olan her sesin bir örneğini almayı ve bunları bir araya getirmeyi ve ardından sonucu bir dosyaya yazmak için standart Java dosyası API'larını kullanmayı içerecektir. Eklemenin taşmayacağından emin olmak için dikkatli olunmalıdır. Kodlama ve kod çözme işlemlerine başlarsanız daha karmaşık olur. Google’ı kullanırsanız yararlı bilgiler bulabilirsiniz. "ffmpeg mp3 android" veya "ses karıştırma" için. – Michael

+1

Çok yardımcı teşekkürler. Bunu yeni başlayanlar için buldunuz - http://mobilengineering.blogspot.it/2012/06/audio-mix-and-record-in-android.html – fxfuture

1

, Michael ü uygulamak gerekir dediği gibi Bunun için kendi kodlayıcı ve kod çözücü. Görselleştirici, çok düşük kalitede veri sağlıyor ve bunları, ekolayzırla senkronize edilen özel görünümler ve efektler üzerinde göstermek için kullanabiliyoruz.

Bu, MP3 dosyası için basit bir kod çözücü ve kodlayıcı bulabileceğiniz link'dur. MP3 dosyasından veri okuyor ve yeni MP3 dosyasına yerleştiriyorlar. Başka bir uzantı için de destek oluşturmuşlardı.

http://code.google.com/p/ringdroid/source/browse/#svn%2Fbranches%2Fgingerbread%2Fsrc%2Fcom%2Fringdroid

0

http://xzpeter.org/?p=254 göre, Android kaynaklar değiştirirseniz iç ses oynatımını yakalamak mümkündür. Özellikle AudioFlinger::MixerThread sınıfının yazma işlevi. (Makalenin biraz eski olduğunu unutmayın - en son Android sürümlerinde AudioFlinger yeniden düzenlendi ve kod şimdi threadLoop_write() işlevinde bulunabilir).

orijinal çözüm yazar alıntı:

AudioFlinger dir frameworks/base/services/audioflinger/ altında uygulanmaktadır. 'a ne yapacağız, mikser çıkışını bulmaktır. AudioFlinger.cpp dosyasında, karıştırıcının iş parçacığı olan AudioFlinger::MixerThread::threadLoop() numaralı AudioFlinger::MixerThread::threadLoop() numarasını görebiliriz ve bu MikserThread, AudioFlinger::BaseThread'dan devralınır.Sonra, yapın editörü (vim, emacs gedit, her neyse) ile anahtar kelimeyi mOutput->write arama ve biz threadLoop() fonksiyonu altında böyle şeyler bulacaksınız: çok noktayı ise

mLastWriteTime = systemTime(); 
mInWrite = true; 
mBytesWritten += mixBufferSize; 

int bytesWritten = (int)mOutput->write(mMixBuffer, mixBufferSize); 
if (bytesWritten < 0) mBytesWritten -= mixBufferSize; 
mNumWrites++; 
mInWrite = false; 

mikser çıkışı arabellek bence donanım ile ilgili kodlara aktarılır ve ses klibi mixBufferSize boyutunda mMixbuffer içinde. Bu tamponda, 44100Hz örnekleme hızı, 2 kanal ve 16 bit küçük parazitli PCM ham ses verileri vardır. dönüştürmek için,
aplay -t raw -c 2 -f S16_LE -r 44100 wav.raw

neyse: Bu /data/wav.raw gibi bir dosyaya dışarı tampon yazarsanız , sadece ev sahibi makineye veri dosyasını almak ve aplay ile oynamak için adb çekme kullanabilirsiniz Bu mp3 için Michael tarafından belirtildiği gibi harici kodlayıcı kullanmak zorunda kalacaksınız.

İlgili konular