Italian [B4X] Suonare un piccolissimo mp3

Aldo's

Active Member
Licensed User
Buon pomeriggio a tutti.
Devo far suonare un tic ed un tac tramite timer.
Ho usato un modo che ho già utilizzato in passato ed ho scritto questo codice:
B4X:
Private Sub bttPlay_Click
    dTic=60000/iVelo
    Dim iTic As Int = Normalizza(dTic)
    Mp.Initialize
    Mp.Load(File.DirAssets,"1.mp3")
    Mr.Initialize
    Mr.Load(File.DirAssets,"2.mp3")
    Timer1.Initialize("Timer1",iTic)
    Timer1.Enabled=True   
End Sub
Quando lo mando in debug mi restituisce questo errore:
Error occurred on line: 80 (TicTac)
java.io.IOException: Prepare failed.: status=0x1
at android.media.MediaPlayer._prepare(Native Method)
at android.media.MediaPlayer.prepare(MediaPlayer.java:1323)
at anywheresoftware.b4a.objects.MediaPlayerWrapper.loadAfterReset(MediaPlayerWrapper.java:101)
at anywheresoftware.b4a.objects.MediaPlayerWrapper.loadAfterReset(MediaPlayerWrapper.java:72)
at anywheresoftware.b4a.objects.MediaPlayerWrapper.Load(MediaPlayerWrapper.java:66)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.shell.Shell.runVoidMethod(Shell.java:777)
at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:354)
at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:255)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:157)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:201)
at anywheresoftware.b4a.objects.ViewWrapper$1.onClick(ViewWrapper.java:80)
at android.view.View.performClick(View.java:7558)
at android.view.View.performClickInternal(View.java:7534)
at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0)
at android.view.View$PerformClick.run(View.java:29661)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:240)
at android.os.Looper.loop(Looper.java:351)

Quella che li chiama Line 80 corrisponde a:
B4X:
    Mp.Load(File.DirAssets,"1.mp3")

Il file è sicuramente nella cartella File del progetto.

Cosa sbaglio?
Esiste un metodo migliore per eseguire questi mp3 (durano circa 1 decimo di secondo) l'uno e si suonano alternativamente.
Grazie
 

Fulvio75

Well-Known Member
Licensed User
Non ho il progetto sottomano io l'ho fatto controlla l'oggetto MP che hai dichiarato e vedrai un evento di termine suono, quando termina carica l'altro suono e funziona
 

Sagenut

Expert
Licensed User
Longtime User
Per suoni brevi forse conviene usare il SoundPool
 

Sagenut

Expert
Licensed User
Longtime User
Se hai bisogno allega i 2 suoni così proviamo a fare un esempio.
 

Sagenut

Expert
Licensed User
Longtime User
Se ti và prova questo
 

Attachments

  • SoundPool.zip
    23.7 KB · Views: 36

Aldo's

Active Member
Licensed User
Se ti và prova questo
Visto, l'unica cosa è che non posso utilizzarlo in B4I perchè non c'è la libreria Audio.
Giusto?
 

Filippo

Expert
Licensed User
Longtime User
Ciao @Aldo's

prova in questo modo.
B4X:
Sub Process_Globals
    Private mp As MediaPlayer
End Sub

Private Sub Application_Start (Nav As NavigationController)
'...
    mp.Initialize(File.DirAssets, "1.mp3", "")
'...
End Sub

Private Sub bttPlay_Click
    mp.Play
End Sub
 

Filippo

Expert
Licensed User
Longtime User
O meglio ancora:
B4X:
Sub Process_Globals
    Private mp(2) As MediaPlayer
    Private Timer1 As Timer
    Private dTic As Int
    Private count As Int
End Sub

Private Sub Application_Start (Nav As NavigationController)
'...
    mp(0).Initialize(File.DirAssets, "1.mp3", "")
    mp(1).Initialize(File.DirAssets, "2.mp3", "")
    
    dTic=60000/iVelo
    Timer1.Initialize("Timer1", dTic)
'...
End Sub

Private Sub bttPlay_Click
    count = 0
    Timer1.Enabled = True 
End Sub

Private Sub Timer1_Tick
    mp(count).Play
    count = count + 1
    If count > 1 Then
        Timer1.Enabled = False
    End If
End Sub
 

Sagenut

Expert
Licensed User
Longtime User
Visto, l'unica cosa è che non posso utilizzarlo in B4I perchè non c'è la libreria Audio.
Giusto?
Non sapevo che ti servisse cross platform.
Nel titolo ho visto B4A e credevo fosse limitato a questa piattaforma.
 

Aldo's

Active Member
Licensed User

Sagenut

Expert
Licensed User
Longtime User
Hai ragione, ho messo B4A nel titolo del post...chiedo scusa.
Ora cambio.
Non c'è bisogno di scusarsi.
L'importante è capire cosa uno cerca e la soluzione arriva, forse è già arrivata grazie a @Filippo . ;)
 
Top