Meilleur auteur de réponses
Lecture de mciSendString en mémoire.

Question
-
Bonjour, j'essai de récupérer un flux du microphone depuis l'API de mciSendString.
Pour le moment j'arrive seulement à enregistrer le son du microphone et à l'enregistrer sur un fichier wav.
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal Rtn As String, ByVal uReturnLength As Integer, ByVal hwndCallback As Integer) As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click mciSendString("open new Type waveaudio Alias recsound", vbNullString, 0, 0) mciSendString("record recsound", vbNullString, 0, 0) End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click mciSendString("save recsound " + Application.StartupPath + "\record.wav", vbNullString, 0, 0) mciSendString("close recsound", "", 0, 0) My.Computer.Audio.Play(Application.StartupPath + "\record.wav", AudioPlayMode.WaitToComplete) End Sub
(Code trouvé sur le Net que j'ai adapté).
J'aimerai savoir si il est possible de récupérer l'enregistrement dans un tableau de byte() plutôt que de :
While schtroumpf = 'bleu'
enregistrer le son un laps de temps
enregistrer dans un fichier wav
ReadAllBytes le fichier wav
supprimer le fichier wav
End While
Car évidemment comme ceci, j'ai des saccades lors de la lecture.
Merci.
Réponses
-
Je n'ai pas une (autre) solution pour mciSendString.
Vous avez besoin d'un sort de Stream, et mciSendString ne peut pas faire ça.
Ici vous avez la confirmation et quelques solutions alternatives :
http://social.msdn.microsoft.com/Forums/en-US/mediafoundationdevelopment/thread/67d795c3-122f-4f93-9ae1-697c3a404d0e/
Aussi, vérifies NAudio :
http://naudio.codeplex.com/
et
http://www.codeproject.com/Questions/422447/Convert-Microphone-Audio-To-MemoryStream
Cordialement,
- Marqué comme réponse Guyome41 mardi 28 mai 2013 12:49
Toutes les réponses
-
Bonjour
N'est pas très claire pour moi, mais utiliser un Timer ressemble a être ce que vous voulez.
http://msdn.microsoft.com/en-us/library/system.timers.timer(v=vs.100).aspx
Dans le Timer vous testez la condition et arrêter l'enregistrement si nécessaire.
Cordialement,
-
Bonjour
un petit retour SVP?
Merci
Cordialement,
-
Bonjour, tout d'abord merci pour votre réponse.
Mon but étant d'insérer un système de messagerie vocal (par le biais d'un microphone) sur mon système de messagerie instantané qui pour le moment fonctionne que par l'envoi de texte.
Evidemment, l'idéal serrait d'écouter le microphone en streaming et d'envoyer les données en instantané plutôt que d'essayer de bidouiller en récupérant les données préalablement enregistré dans un fichier wav.
Le timer n’étant pas une solution puisque j'ai déjà essayé sur un thread à part qui écoute pendant 2 secondes et un autre qui li les données du fichier .wav généré.
Le résultat n'est pas satisfaisant. -
Enregistrer des fichiers pour les envoyer après c'est un peu casse - pied.
Ce que je vous propose c'est d’utiliser une solution VOIP
http://sipsorcery.codeplex.com/
http://www.codeproject.com/Articles/17048/Examples-to-create-your-Conferencing-System-in-NET
ou
http://www.roseindia.net/voip/free-voip-software-development-library.shtml
Cordialement,
-
bonjour,
si j'ai bien compris, vous voudrez envoyer votre wav avec texte.dans l'attachement vous pouvez maitre votre wav.
voici en image:
mes codes:
Imports System.Net.Mail Imports System.Net Public Class Form1 Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click Try Dim smtpServer As New SmtpClient() Dim mail As New MailMessage smtpServer.Credentials = New Net.NetworkCredential(TextBox1.Text, TextBox2.Text) smtpServer.Port = 587 smtpServer.Host = "smtp.live.com" smtpServer.EnableSsl = True mail.From = New MailAddress(TextBox3.Text) mail.To.Add(TextBox3.Text) mail.Subject = TextBox4.Text mail.Body = TextBox5.Text() mail.Attachments.Add(New Mail.Attachment(OpenFileDialog1.FileName.ToString)) smtpServer.Send(mail) MsgBox("mail a etait envoyer", MsgBoxStyle.OkOnly, "ENVOYER") Catch ex As Exception MsgBox("Message n'a pas été envoyer" & Err.Description, MsgBoxStyle.OkOnly, "ERREUR") End Try End Sub Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then ListBox1.Items.Add(OpenFileDialog1.FileName) End If End Sub End Class
cordialement, zorro591
-
Enregistrer des fichiers pour les envoyer après c'est un peu casse - pied.
---> mciSendString <---
et non depuis une autre dll ?
Zorro591, j'ai l’impression que tu veux refiler ton code à tous le monde ? Et je ne souhaite pas envoyer d'email avec un wav dedans... -
Je n'ai pas une (autre) solution pour mciSendString.
Vous avez besoin d'un sort de Stream, et mciSendString ne peut pas faire ça.
Ici vous avez la confirmation et quelques solutions alternatives :
http://social.msdn.microsoft.com/Forums/en-US/mediafoundationdevelopment/thread/67d795c3-122f-4f93-9ae1-697c3a404d0e/
Aussi, vérifies NAudio :
http://naudio.codeplex.com/
et
http://www.codeproject.com/Questions/422447/Convert-Microphone-Audio-To-MemoryStream
Cordialement,
- Marqué comme réponse Guyome41 mardi 28 mai 2013 12:49
-