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

wav-Dateien an bestimmten Zeitpunkten bearbeiten

 

Lycidas
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 26.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2010, 11:41     Titel: wav-Dateien an bestimmten Zeitpunkten bearbeiten
  Antworten mit Zitat      
Hallo,

ich muss im Moment wav-Dateien in Matlab bearbeiten. Genauer:
ich habe eine wav-Datei und einen bestimmten Zeitpunkt x gegeben. Ziel ist es, eine neue wav-Datei zu erstellen, die das Signal 500ms vor und nach dem Zeitpunkt x enthält.

Code:

%Das Einlesen der Originalwav habe ich gelöst mit
[dwav,fs] = wavread (Datei);
%Die Gesamtzeitlänge bekomme ich auch durch
gesamtzeit = length(dwav)/fs;


Aber wie schaffe ich es nun, dass ich den Zeitpunkt x bekomme, um dann alle weiteren Manipulationen durchführen zu können?
Vielen Dank und Grüße,
Lycidas
Private Nachricht senden Benutzer-Profile anzeigen


Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 27.10.2010, 12:40     Titel:
  Antworten mit Zitat      
Moin,

damit müßte es gehen:

http://www.gomatlab.de/wav-datei-in.....t13571,highlight,wav.html

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
Lycidas
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 26.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2010, 13:53     Titel:
  Antworten mit Zitat      
Das hilft mir einen Schritt weiter, aber leider nicht vollständig.

Dieses Art von Programmierung erlaubt mir zwar von Sekunde zu Sekunde zu springen, aber nicht im Milisekundenbereich - was hier notwendig ist.
Code:

[dwav, fs] = wavread('01f1.wav', [2, 3]); % funktioniert
[dwav, fs] = wavread('01f1.wav', [2.15, 3.15]); % führt zu Fehlermeldungen
 


Fehlermeldungen sind:
Zitat:

??? Error using ==> wavread>parseArgs at 827
Sample indices must be integer values

Error in ==> wavread at 62
[file,ext,isNative] = parseArgs(varargin{:});
[/quote]
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2010, 14:12     Titel:
  Antworten mit Zitat      
In dem Link wurde das ganze mit der Samplerate multipliziert.
Was dann auch im Millisekundenbreich liegt.
Daran gedacht?

Gruß Ben
 
Lycidas
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 26.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2010, 14:28     Titel:
  Antworten mit Zitat      
Ja, beim zweiten Durchlesen. Funktioniert trotzdem nicht, weil 2.15*44100 +1 immer noch eine Zahl mit Komma ist. Und an diesem Punkt scheint Matlab sich ja zu beschweren. Es möchte eine ganzzahlige positive Zahl haben. Abrunden ist auch keine Lösung für meine Arbeit.
Grüße, Lycidas
Private Nachricht senden Benutzer-Profile anzeigen
 
Achi
Forum-Guru

Forum-Guru


Beiträge: 250
Anmeldedatum: 14.04.10
Wohnort: ---
Version: R2007a
     Beitrag Verfasst am: 27.10.2010, 14:30     Titel:
  Antworten mit Zitat      
Bei mir ist das :

Code:
2.15*44100 +1
ans =
       94816


Gruß Achi
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Lycidas
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 26.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2010, 11:31     Titel:
  Antworten mit Zitat      
Die Zahlen oben war nur ein Beispiel, hier also ein paar Originalzahlen. Ich muss dazu sagen, dass ich das für über 100 Dateien machen muss, d.h. ich habe nicht immer Zahlen, bei denen die oben gemachte Rechnung sauber rauskommen würde.

Code:

gesamtzeit = 2.654830
start = (gesamtzeit - 0.5)*44100 + 1 % = 9.5029e + 04
stop = (gesamtzeit + 0.5)*44100 + 1 % = 1.3913e + 05
[dwav, fs] = wavread('01f1.wav', [start stop]);
 


Und dann bekomme ich wieder die oben genannten Fehlermeldungen. Bei der Genauigkeit würden mir auch 3 Stellen nach dem Komma reichen, aber genau ab da bekomme ich die Schwierigkeiten.
Grüße, Lycidas
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 28.10.2010, 15:29     Titel:
  Antworten mit Zitat      
Hallo Lycidas,

Du hast das WAV-File mit 44100Hz gesamplet. Das macht etwa 2.267574 * 10^-5 Sekunden pro Sample. Es ist dasnn nicht verwunderlich, dass Du nicht alle möglichen Zeiten mit beliebiger Genauigkeit in Sample umrechnen kannst. Ohne Runden wird das nicht funktionieren.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Lycidas
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 26.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2010, 08:36     Titel:
  Antworten mit Zitat      
Ja, da hast du leider recht. Mein Programmcode sieht jetzt so aus:
Code:

start = (zeit(i) - 0.5)*44100 +1;
stop = (zeit(i) + 0.5)*44100 +1;
rstart = round (start*10)/10;
rstop = round (stop*10)/10;
[dwav, fs] = wavread(dname{i}, [rstart rstop]);
 


Ich danke allen für die Hilfe. Beitrag kann nun geschlossen werden.
Viele Grüße, Lycidas
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.