AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

mciSendString - Aufnahme schließen

Ein Thema von TheMiller · begonnen am 5. Mär 2007 · letzter Beitrag vom 8. Mär 2007
Antwort Antwort
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

mciSendString - Aufnahme schließen

  Alt 5. Mär 2007, 20:37
Hallo,

ich habe mit Hilfe des Tuts aus der DP und den mciSendString-Befehlen recht erfolgreich Audiodaten aufgenommen und in mp3 codiert. Nach dem Speichern der wav-Datei habe ich folgenden String gesendet:

mciSendString('CLOSE mySound',nil,0,Handle); So steht's ja auch im Tut. Doch wenn ich jetzt ein anderes Form öffne, kommt eine Zugriffsverletzung. Dieses Form greift auf eine DLL und ein Dyn. Array zu. Doch diese Zugriffverletzung kommt nur NACH der Aufnahme. Vorher passt alles!

Ich hab mir gedacht, was das Eine mit dem Anderen zu tun hat, aber ich habe einfach mal die komplette Audio-Sache rausgelassen und siehe da - es funzt prima.

Ich habe EXAKT die Zeilen aus dem TUT übernommen. Liegt das jetzt an meinem Array (ich habe es immer mit [arrayname]:=nil geleert, als ich nicht mehr gebraucht habe) leigen? Oder kann es an der AudioAufnahme liegen?

Danke im Voraus!
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

Re: mciSendString - Aufnahme schließen

  Alt 5. Mär 2007, 23:43
Welches Tut., wie schaut denn der Quelltext aus?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#3

Re: mciSendString - Aufnahme schließen

  Alt 6. Mär 2007, 00:03
Also, mein "Aufnahme - Anhören - Speichern"-Code sieht so aus: Ist natürlich über 3 Button verteilt (Aufnahme, Anhören und Speichern.

Delphi-Quellcode:
  mciSendString('OPEN NEW TYPE WAVEAUDIO ALIAS meineWav',nil,0,Handle);
  mciSendString('SET meineWav ' +
                   'TIME FORMAT MS ' +
                   'BITSPERSAMPLE 16 ' +
                   'CHANNELS 2 ' +
                   'SAMPLESPERSEC 44100 ' +
                   'BYTESPERSEC 176400 ' +
                   'ALIGNMENT 4',
                   nil,0,handle);
  mciSendString('RECORD meineWav',nil,0,Handle);
  mciSendString('STOP meineWav',nil,0,Handle);
  mciSendString(PChar('SAVE meineWav "'+Filename+'"'), nil,0,Handle);
  mciSendString('CLOSE meineWav',nil,0,Handle);
  mciSendString(PChar('close ' + "'+Filename+'"'), nil, 0, 0);
Bevor ich auch nur einen mciString sende, habe ich getestet, ob die anderen Programmfunktionen funktionieren. Das ist der Fall. Öffne ich jetzt zb meineWav, nehme auf und speichere, dann bricht das Programm beim Aufruf einer anderen Form zusammen. Diese wiederum benutzt 4 Funktionen aus einer DLL, die nach dem Benutzer von mciSendString auch nicht mehr funktionieren. Das schöne daran ist, dass die 4 Funktionen genau das selbe beinhalten, wie eine andere Form aus diesem Projekt, welche ganz normal arbeitet - nur eben die DLL nicht mehr. Dabei haben die DLLs überhaupt nichts mit Ton o.Ä zu tun. Da besteht KEINERLEI Zusammenhang.

Deshalb dachte ich, dass es so sein muss. Ich lade die DLL statisch und sie belegen Speicher. Ich greife drauf zu - alles paletti. Ich öffne dann ein MCI-Gerät (mciSendString('OPEN....')) und der überschreibt(?) den belegten Speicher der DLLs. Wenn ich jetzt wieder auf die DLL zugreifen will, gibt er mir eine Zugriffsverletzung. Die eine Unit im Hauptprogramm hat aber die gleichen Funktionen, wie die DLL - funktionieren aber richtig. Vielleicht, weil dess Speicher nicht überschrieben wurde?

Ich bin jedenfalls erstmal ratlos und bitte um HILFE!!

Bye und danke
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#4

Re: mciSendString - Aufnahme schließen

  Alt 6. Mär 2007, 00:10


Wie lädst du die Dll und kann das u. U mit dem Wandeln zu mp3 zusammenhängen ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#5

Re: mciSendString - Aufnahme schließen

  Alt 6. Mär 2007, 00:25
Die DLL lade ich statisch (stdcall; external '...dll')

Das wandeln in mp3 hat damit nix zu tun, da ich diese Funktion schon rausgenommen habe. Das Problem bestand immernoch. Doch als ich den oben geposteten Code rausgenommen habe, hat alles Funktioniert, wie es funktionieren sollte...
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#6

Re: mciSendString - Aufnahme schließen

  Alt 6. Mär 2007, 00:38
Habe die Brille jetzt ned auf, muss
mciSendString(PChar('close ' + "'+Filename+'"'), nil, 0, 0); das nicht so
mciSendString(PChar('close "' + Filename + '"'), nil, 0, 0); sein ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#7

Re: mciSendString - Aufnahme schließen

  Alt 6. Mär 2007, 06:51
Joa, kann sein dass ich mich da jetzt verschrieben habe, aber ich hatte vorher auch statische Namen wie "C:\rec.wav" und da hat es auch nicht funktioniert. Ich werd's heute mittag aber nochmal testen.
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#8

Re: mciSendString - Aufnahme schließen

  Alt 8. Mär 2007, 02:54
Ok, dieser Fehler besteht also immernoch. Ich habe folgendes Problem:

Ich habe eine DLL, die einen String, den ich aus dem Internet lade nach einem bestimmten Separator teilt und ein Array erstellt. Auf dieses Array greife ich von der Hauptanwendung über den Zeiger zu. Funktioniert immer prima (sogar FASTMM4 hat keine Leaks festgestellt (weder in der Anwendung noch in der DLL). Dazu habe ich auch noch in einer anderen eingebundenen DLL eine Form, die ich aufrufe (ich nenne sie jetzt mal DLLForm1). Sobald ich jetzt allerdings einen mciString gesendet habe und wie oben beschrieben ihn auch wieder geschlossen habe kommen Probleme mit den DLL-Forms. Und zwar wenn ich wieder auf sie zugreifen will kommen mehrere AVs (mit den gleichern Fehlermeldungen). Dies passiert nicht nur bei DLLForm1, sondern bei allen DLLForms. Das Hauptprogramm arbeitet korrekt weiter. Dabei ist es der DLLForm egal, wo sie zusammenbricht. Schon zB bei der Anweisung:

TreeView1.Items.Clear; Was ist da denn los? Mit den Zeigern kann es ja nix zu tun haben. Die habe ich ja alle wieder freigegeben, auch richtige Typen benutzt. Vor allem funktionieren die ja richtig, auch ohne Lecks. Ich kann mir das nicht erklären.

Achja: Die FormDLLs sind dynamisch geladen und die reine Funktions-DLL ist statisch geladen.

Bitte um Hilfe!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz