Um den nur kurzen Piepton am Lautsprecher zu erhalten, möchte ich einzelne Bits direkt an den Lautsprecher senden. Ähnlich wie das LED-Blinken. Gibt es eine Möglichkeit, einen kurzen Piepton ohne jegliche Art von Mediaplayer zu machen?
So spielen Sie programmgesteuert einen kurzen Piepton für den Lautsprecher des Android-Telefons ab
Josch
Ich empfehle Ihnen, die zu verwenden ToneGenerator
Klasse. Es erfordert keine Audiodateien, keinen Mediaplayer, und Sie können die Lautstärke, die Dauer (in Millisekunden) und den Tontyp des Signaltons anpassen. Ich mag dieses:
ToneGenerator toneGen1 = new ToneGenerator(AudioManager.STREAM_MUSIC, 100);
toneGen1.startTone(ToneGenerator.TONE_CDMA_PIP,150);
Sie können in das ToneGenerator-Objekt sehen (CMD + Klick auf ToneGenerator. , in Mac) und daneben einen anderen Signaltontyp auswählen TONE_CDMA_PIP
, 150
ist die Dauer in Millisekunden, und 100
die Lautstärke.
-
Wie erreichen wir damit einen doppelten Piepton?
– Maurer
3. November 2017 um 13:10 Uhr
-
@Mauker Sie können ‘ToneGenerator.TONE_PROP_BEEP2’ verwenden, um einen doppelten Piepton zu erzielen.
– Manoj Pedvi
17. Mai 2018 um 12:37 Uhr
-
Am Ende habe ich genau das versucht, und es funktioniert. Danke für den Kommentar Manoj!
– Maurer
17. Mai 2018 um 12:39 Uhr
-
@ManojPedvi WIE MAN LANGEN BEEP SPIELT?
– Sagar
6. August 2020 um 12:07 Uhr
-
Achtung – Sie müssen die anpassen
duration
Argument (etwas wie 300ms ist gut) zu spielenToneGenerator.TONE_PROP_BEEP2
oder ein längerer Piepton– Sakiboy
25. Februar 2021 um 2:05 Uhr
Ich füge nur Joshs Antwort hinzu. du musst loslassen ToneGenerator
verwenden Handler
. vor allem, wenn Sie einen Fehler haben java.lang.RuntimeException: Init failed at android.media.ToneGenerator.native_setup(Native Method)
wie ich es getan habe.
der komplette Code:
import android.media.AudioManager
import android.media.ToneGenerator
import android.os.Handler
import android.os.Looper
class BeepHelper
{
val toneG = ToneGenerator(AudioManager.STREAM_ALARM, 100)
fun beep(duration: Int)
{
toneG.startTone(ToneGenerator.TONE_DTMF_S, duration)
val handler = Handler(Looper.getMainLooper())
handler.postDelayed({
toneG.release()
}, (duration + 50).toLong())
}
}
-
Gott sei Dank für die Einbeziehung der Import-Anweisungen! Wenn ich versuche, herauszufinden, wie etwas zu tun ist, weiß ich wahrscheinlich auch nicht, wo ich es finden kann. Danke schön! 🙂
– Karen Kate
24. Juli 2018 um 23:10 Uhr
Für Kotlin:
ToneGenerator(AudioManager.STREAM_MUSIC, 100).startTone(ToneGenerator.TONE_PROP_BEEP, 200)
In meinem Fall war der Tongenerator aus irgendeinem Grund nicht laut genug.
Am Ende habe ich den Media Player verwendet und eine Beeper-Klasse erstellt, die es ermöglicht, einen Piepton mit einer bestimmten Lautstärke abzuspielen.
import android.content.Context
import android.media.AudioAttributes
import android.media.AudioManager
import android.media.MediaPlayer
import android.net.Uri
import com.nfci.mesea.time.R
import kotlin.math.ln
class Beeper(val context: Context) {
private val maxVolume = 100f
private val mediaPlayer = MediaPlayer()
init {
val beep = Uri.parse("android.resource://" + context.packageName + "/" + R.raw.beep)
val audioAttributes = AudioAttributes.Builder()
.setFlags(AudioAttributes.FLAG_AUDIBILITY_ENFORCED)
.setLegacyStreamType(AudioManager.STREAM_ALARM)
.setUsage(AudioAttributes.USAGE_ALARM)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build()
mediaPlayer.setDataSource(context, beep)
mediaPlayer.setAudioAttributes(audioAttributes)
mediaPlayer.prepare()
}
fun play(volume: Int){
if (!mediaPlayer.isPlaying) {
val calculatedVolume = 1 - (ln(maxVolume - volume.toFloat()) / ln(maxVolume))
mediaPlayer.setVolume(calculatedVolume, calculatedVolume)
mediaPlayer.start()
}
}
}
mögliches Duplikat von How to play ringtone/alarm sound in Android
– Agar
8. April 2015 um 7:58 Uhr
Duplikat von stackoverflow.com/questions/12154940/…
– Ferdau
8. April 2015 um 8:04 Uhr
Ja, der beste Weg ist die Verwendung von NDK. Danke!
– Andreikaschin
26. Mai 2015 um 15:06 Uhr