Italian [B4X] Suonare un piccolissimo mp3

Aldo's

Well-Known 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: 370

Aldo's

Well-Known 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

Well-Known 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