Page 1 sur 1

Enregistrer la sortie de la carte son avec Bass en wav ou Ogg

Publié : lun. 14/mars/2022 9:14
par hub73
Bonjour à vous.

Je tente désormais d'enregistrer le son de la carte son dans un fichier wav ou ogg aec la librairie Bass. Ce serait une fonction très utile pour mon logiciel de webradio. Avez-vous réussi à faire cela ? Depuis la documentation de Bass j'ai un exemple en VB mais je ne parvient pas à l'adapter car je n'ai aucune fonction wavewriter dans les fichiers PBI pour Bass. Des idées ? Merci à vous.

Many thanks for your ideas ! Perhaps you know how to record from bass to wav or ogg.

Code : Tout sélectionner

Private _waveWriter As WaveWriter = Nothing ' make it global, so that the GC can not remove it
Private _myRecProc As RECORDPROC
Private _recHandle As Integer = 0
...
' start recording
_myRecProc = New RECORDPROC(AddressOf MyRecording)
_recHandle = Bass.BASS_RecordStart(44100, 2, 
                  BASSFlag.BASS_RECORD_PAUSE Or BASSFlag.BASS_SAMPLE_FLOAT, _myRecProc, IntPtr.Zero)
' create a WaveWriter using the _recHandle to set the freq. and channels, but write the wave at 24-bit
_waveWriter = New WaveWriter("test.wav", _recHandle, 24, True)
Bass.BASS_ChannelPlay(_recHandle, False)
...
' when finished recording call this!
If Not (_waveWriter Is Nothing) Then
  ' finilize the wave file!
  _waveWriter.Close()
End If
...
' the recording callback
Private Function MyRecording(handle As Integer, buffer As IntPtr, length As Integer, user As IntPtr) As Boolean
  ' we will get float sample data here
  ' so make sure the _waveWriter.OrigResolution property is set to 32
  ' this was automatically done, since we started recording with BASSFlag.BASS_SAMPLE_FLOAT
  _waveWriter.Write(buffer, length)
  Return True ' always continue recording
End Function

Re: Enregistrer la sortie de la carte son avec Bass en wav ou Ogg

Publié : lun. 14/mars/2022 17:57
par hub73
Tout simplement

Code : Tout sélectionner

Procedure.l Son_EnregistrementCallback_enreg(Channel.l, *buffer, length.f, user.f)
  
  Protected Result.l
  
  Result = BASS_Encode_IsActive(Channel); //  <> 0 continue recording if encoder is live
  
  BASS_Encode_Write(Channel.l,*buffer,length.f)
  
  ProcedureReturn Result
  
EndProcedure

Procedure Son_enregistrer()
  
  Protected NomFichier.s
  Protected Retour
   
  NomFichier = "C:\Users\user\Documents\test.ogg"
  
   Retour = BASS_RecordInit(gParametres\Dispositif_sonore)
   If Retour = 0
     Ajouter_au_log ("Bass: choix dispositif enregistrement : " + BASS_ErrorGetCode())
     BASS_RecordFree()
     ProcedureReturn #False
   EndIf
   
   Retour = BASS_RecordSetDevice(gParametres\Dispositif_sonore)
   If Retour = 0
     Ajouter_au_log ("Bass: choix dispositif enregistrement : " + BASS_ErrorGetCode())
     ProcedureReturn #False
   EndIf
   
   gParametres\Channel_enreg = BASS_RecordStart (48000, 2, #BASS_RECORD_PAUSE | #BASS_SAMPLE_FLOAT, @Son_EnregistrementCallback_enreg(), #Null);)
   
   If gParametres\Channel_enreg = 0
     Ajouter_au_log ("Bass : enregistrement erreur : " + BASS_ErrorGetCode())
     ProcedureReturn #False
   Else
     Ajouter_au_log ("Bass : enregistrement démarré.")
   EndIf  
   
  Protected Options.s
  Options = StringToANSI("--bitrate 192")
  
  gParametres\HENCODE_encoder_enreg = BASS_Encode_Ogg_StartFile(gParametres\Channel_enreg, @options, #BASS_UNICODE | #BASS_ENCODE_AUTOFREE, @NomFichier); // setup the encoder
 
  If gParametres\HENCODE_encoder_enreg = 0
    Ajouter_au_log ("Bass : erreur de l'encodeur ogg : " + BASS_ErrorGetCode())
    ProcedureReturn #False
  Else
    Ajouter_au_log ("Encodeur OGG Bass fonctionne. ("+ Str(gParametres\HENCODE_encoder_enreg) + ")")
  EndIf
     
   ;   
;     
;   EndIf
;   
   BASS_ChannelPlay(gParametres\Channel_enreg, 0)
;   BASS_Encode_SetNotify(gParametres\HENCODE_encoder, @Son_EncoderNotify(), 0)
  
EndProcedure