WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Große Sounddaten Abspielen, Speichern, Visualisieren

 

derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 29.09.2010, 15:55     Titel: Große Sounddaten Abspielen, Speichern, Visualisieren
  Antworten mit Zitat      
Hallo liebe Matlab Freunde, ich habe ein riesiges Problem im wahrsten Sinne des Wortes. Ich habe ein Annotationstool für Audiodaten programmiert. Das heißt, ein Tool, wo man Sounddaten laden kann und diese dann kategorisiert. D.h. man kann den Sound Abspielen, Speichern und er wird Visualisiert. Bis jetzt hatte ich aber nur 2kHz Daten und konnte die einfach komplett in den RAM laden. Jetzt möchte ich in Zukunft aber auch 41kHz einspielen können und da wird es etwas schwieriger.

Ich hatte mir überlegt 4 Funktionen zu programmieren:

1. Funktion die große Dateien RAM speichernd abspielt
2. Funktion die beliebig große Soundschnipsel abspeichern kann
3. Funktion zur Visualisierung von großen Sounddaten
(4. Funktion um den Speicherbedarf an den jeweiligen Computer anzupassen) --> relativ einfach

Im Grunde genommen basieren alle 3 wichtigen Funktionen darauf, dass Signal in Teile zu zerlegen und nur diese zu verarbeiten. Es geht mir jetzt ersteinmal um die erste Funktion. Ich habe das mal mit dem audioplayer probiert, dass funktioniert soweit ist aber nicht sonderlich schön und es gibt zwichen den clips immer eine kurze Unterbrechung. Es ist halt wichtig, dass zwischendurch noch Zeit ist für die Stopp Funktion. Hier mal der Code für die 1.Funktion. Wie gesagt, dass funktioniert soweit ist aber etwas unschön und es gibt kurze Unterbrechungen. Mit sound() und wavplay() habe ich es auch schon versucht. Geht zwar auch beides aber bei der jetzigen Version kann ich halt zwischendurch sehr schnell eine Stopp Funktion einbauen, was ich bei den anderen Sachen nicht kann.

Hier der Gesamtcode, ist leider nicht ausführbar, weil ich einige eigene Funktionen nutze. Dafür habe ich versucht es ausführlich auszukommentieren.

Code:

function result = playwav(Audiopath,from,to)
% plays an Audiofile in smaller clips to save ram memory
% playwav(Audiopath,from,to)
% Audio

% global variable to stop the sound out of the function
global stopaudio;
stopaudio=false;
% first stop will pause second stop will stop
global pausetime;

% time for 1 clip of the signal in seconds
% saves ram but has a timelag between the clips
% five minutes for several 100 MB of Ram but less timelags
chunktime=60.*5;


% own function for getting the sampling rate and size of both .wav or .aif
% files
[r,fsize_h,fsize]=sizewavaif(Audiopath);
% Number of samples for the clip
Nsamplesclip=(to-from)*60*r;
% max Number of samples per chunk that is loaded into the ram at once
chunksize=chunktime.*r;
% Number of loops
Nloops=ceil(Nsamplesclip./chunksize);

%% if pausetime is not defined use from; else use pausetime
% (two times stop button hit = stop)
sample1=1./(r*60);
if pausetime==0;
    to1=from;
    % if from value is to low, make it 1 sample.
    if to1<sample1
        to1=sample1;
    end
else
    % (one time stop button hit = pause)
    to1=pausetime;
end

%% play sound in defined clips
for k=0:Nloops-1

    from1 = to1+sample1;
    to1 = from1+(chunksize./(r*60));
   
    % own function for reading in .wav or .aif files and convert
    d = readwavaif(Audiopath,from1,to1,r);
   
    % everytime except for the first time
    if k~=0
        % wait for last clip to be finished before starting the next one.
        while strcmp(get(aud1,'Running'),'on')
        % pause needed for the stop button to come through
        % better method ???
        pause(0.01)
        if stopaudio
            'Stop'
            stop(aud1);
            pausetime=to1;
            return
        end
        end
       
    end
 
    aud1 = audioplayer(d,r);
    play(aud1);

end

 


Meine Fragen sind jetzt:

1. Kann man diesen Code verbessern indem man zum Beispiel den pause Teil ersetzt?
2. Hat jemand grundsätzliche Ideen (Ansätze, Fileexchange Programme, Toolboxen Befehle) wie ich dieses Problem bzw. die oben beschriebenen Probleme effektiv lösen kann?
3. Kommt man womöglich bei sowas an objektorientierten Programmieren nicht mehr vorbei?

Ich würde mich sehr über Antworten freuen.

Viele Grüße,

der Oli
Private Nachricht senden Benutzer-Profile anzeigen


derOli
Themenstarter

Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 01.10.2010, 14:58     Titel:
  Antworten mit Zitat      
Irgendjemand? Ich hatte gelesen, die Biosig Toolbox könnte das Problem teilweise lösen, aber da kriege ich nur MEX Fehler. Es gibt auch eine Wavappend Funktion im Fileexchange aber die ist unglaublich langsam.

Grüße

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
derOli
Themenstarter

Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 04.10.2010, 12:21     Titel:
  Antworten mit Zitat      
*push*
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.