Apakah ada cara untuk membuat Android mengeluarkan suara dengan frekuensi sewenang-wenang (artinya, saya tidak ingin memiliki file suara yang sudah direkam sebelumnya)?
Saya telah melihat sekeliling dan ToneGenerator adalah satu-satunya hal yang dapat saya temukan yang bahkan mendekati, tetapi tampaknya hanya mampu mengeluarkan nada DTMF standar.
Ada ide?
Jawaban:
Saya awalnya menemukan kode contoh ini di blog, tetapi ada beberapa bug di dalamnya yang menghasilkan suara yang menghebohkan. Saya telah memperbaiki bug dan memposting kode yang dihasilkan di sini. Sepertinya bekerja dengan baik untuk saya!
sumber
0.0
hingga1.0
. Kalikan dengan32767
akan mengubahnya menjadi kisaran titik tetap 16-bit. The audiotrack mengharapkan buffer menjadi sedikit endian format yang. Oleh karena itu, dua baris berikutnya hanya mengubah urutan byte dari big endian menjadi little endian.Memperbaiki kode di atas:
Tambahkan amplitudo ke atas dan ke bawah untuk menghindari klik.
Tambahkan kode untuk menentukan kapan taktik selesai dimainkan.
sumber
Saya membungkus solusi luar biasa di atas menjadi paket kecil rapi yang lebih bisa digunakan di luar kotak sebagai bel yang dapat dikonfigurasi sederhana. Ini berjalan di thread latar belakang dan memiliki metode stop and play dan beberapa opsi yang dapat Anda atur.
Terserah JCenter sehingga Anda dapat menambahkannya ke daftar dependensi Anda seperti ini
dan Anda menggunakannya seperti ini untuk buzzer terus menerus
atau bel hanya dimainkan sekali dan Anda dapat mengatur frekuensi dan volume seperti ini
Posting blog diperpanjang di sini tentang itu di sini GitHub di sini
sumber
Karena ada bug di beberapa versi Android lama yang menyebabkan kebocoran memori saat menggunakan MODE_STATIC, saya mengubah jawaban Xarph di atas untuk menggunakan MODE_STREAM. Semoga ini akan membantu beberapa.
sumber
Berikut blog lain yang mendemonstrasikan synth sederhana ditambah beberapa UI
http://audioprograming.wordpress.com/2012/10/18/a-simple-synth-in-android-step-by-step-guide-using-the-java-sdk/
Anda mungkin juga tertarik dengan csound atau pdlib (pure data lib) untuk android.
sumber
Kode yang Dimodifikasi Berdasarkan jawaban Singhaks
sumber
// Anda dapat menambahkan nilai arbitrer di synth_frequency untuk mendapatkan suara perubahan misalnya Anda dapat menambahkan variabel acak untuk mendapatkan suara
sumber
Lakukan mayor (16 catatan)
sumber
lihat perpustakaan bermanfaat ini
https://github.com/karlotoy/perfectTune
mudah digunakan
tambahkan ini ke dependensi Anda
Dan Anda menggunakannya seperti ini:
untuk menghentikan lagu:
sumber
Ada beberapa program untuk ini, tetapi mereka payah. Saya mengukur beberapa:
http://www.endolith.com/wordpress/2009/11/24/android-audio-applications/
Jadi jangan lakukan apapun yang mereka lakukan. : D
sumber