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

Musikerkennung mit DFT oder FFT?

 

Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 17.06.2010, 15:55     Titel:
  Antworten mit Zitat      
kannst du auch dein aktueller code hochladen,
kannst du vlt mit dem debugger mir sagen in welcher zeile der fehler auftritt, bzw, bei welchem for-schleifen durchlauf ( aktueller i)
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen


MatzeMeister
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 14.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2010, 17:12     Titel:
  Antworten mit Zitat      
hier der aktuelle code
Code:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Musikerkkenung%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Dieses Programm kann ein Lied (Dateiname nicht bekannt) mit Liedern in einem bestimmten Ordner
% vergleichen, und gibt den Liednamen an und spielt es anschließend ab!
% %%%%%%

clear data;

file='C:\Programme\Matlab\FH Ingolstadt\Brigula\Meins';
for i=1:10  %schätze hier ist der Fehler weil wenn ich hier 20 eigebe geht nix mehr, kommt erst der fehler waveread
    %audio_input=fullfile(file,['test_Track' num2str(i) '.wav']) ;  
    audio_input=fullfile(file,['test_Track' num2str(i) '.wav']) ;  
   
    data{i,:}=wavread(audio_input);
end


%jetzt ein neues lied lesen und vergleichen
[name path]=uigetfile('\*.wav');
test=wavread(fullfile(path,name));

for i=1:20
    %if(data{i}(1:200)==test(1:200)) songs zu ähnlich am anfang und wenn ich hier mehr mache dann meckert er auch
    if(data{i}(300:1000)==test(300:1000)) % besser da Song in der "Mitte" verglichen wird
        x=i;
        break
    end
end
  disp(['Der eingelesene Track ist test_Track: ', num2str(x)])
 
    FS=44100
    player = audioplayer (test, FS)
    play (player)
    %sound ( test,FS)



dann hätt ich noch ne frage wie änder ich des wenn meine testtracks keine fortlaufende nummern haben?

Ich strapazier deine Nerven ganz schön oder Wink
Danke
_________________

Ne is klar
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 17.06.2010, 17:42     Titel:
  Antworten mit Zitat      
das programm funktioniert bei mir einwandfrei, ich habs mir 20 wav-datei getestet und erkennt immer die eingelesene datei.

ich seh aber in deinem code dass die erste schleife bis 10 geht und 2. bis 20.
ausserdem ich hätte gerne eine deiner wav-dateien.

kannst du eine hochladen?????
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
MatzeMeister
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 14.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2010, 18:04     Titel:
  Antworten mit Zitat      
was ist dann des problem bei mir???

wie hast du des mit dem Pfadnamen in der ersten SChleife gelöst? Oder heißen bei dir alle test_track?
_________________

Ne is klar
Private Nachricht senden Benutzer-Profile anzeigen
 
MatzeMeister
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 14.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2010, 18:08     Titel:
  Antworten mit Zitat      
irgendwie geht des mit datei hochladen nicht???

vll liegt des problem an meinen wav.dateien...
_________________

Ne is klar
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 17.06.2010, 18:08     Titel:
  Antworten mit Zitat      
bei mir heissen ra1.wav.......ra20.wav
sag mal heissen bei dir nicht alle test_Track1......test_Track20??????
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
MatzeMeister
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 14.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2010, 18:12     Titel:
  Antworten mit Zitat      
ok habs geschafft die daten waren von nem Bekannten und nicht freigegeben also nur 11- 20 jetzt läufts Laughing

aber wie gesagt frage nocht wenn die nummer test_track nicht fortlaufend ist!?
_________________

Ne is klar
Private Nachricht senden Benutzer-Profile anzeigen
 
MatzeMeister
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 14.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2010, 18:14     Titel:
  Antworten mit Zitat      
es kann ja auch sein dass die tracks nen normalen namen besitzen?

Wie keine AC/DC HIhgway to hell oder so....
_________________

Ne is klar
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 17.06.2010, 18:22     Titel:
  Antworten mit Zitat      
das freut mich aber mannnnnnnnnnnnnnnnnnn ;).
du meinst also wenn die songs so heissen : sido.wav, tokiohotel.wav,
.....??
tjaa in so einem fall würde mit dem befehl 'dir' alle dateinamen in aufeinmal einlesen, in einem cell-array und dann eins nach dem anderen öffnen.
Code:

list=dir([ordner,'/*.wav']);                          
names={list.name};


name{1} ist dann sido.wav usw....

ist halt alles bisschen komplizierter, ich kenn aber lösung erst wenn ich das problem vorm augen habe...

nadann glückwunsch, und übrigens es gimg also doch ohne fft ;)
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
MatzeMeister
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 14.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2010, 19:09     Titel:
  Antworten mit Zitat      
man bin ich dir dankbar ich wär sonst nie auf nen grünen zweig gekommen

ja genau so mein ich dass aber ich glaub des is dann doch a bisl schwerer

mit dem dir haut des bei mir gar nicht hin?!
wenn du ne idee hast bin ich für alles offen


stimmt is jetzt ohne fft gegangen aber wenn du

am ende whos eingibst siehst du dass glaub ich im hintergrund ne fft gemacht wird.....
_________________

Ne is klar
Private Nachricht senden Benutzer-Profile anzeigen
 
MatzeMeister
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 14.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2010, 19:19     Titel:
  Antworten mit Zitat      
würds so machen mach er mir aber ne fehlermeldung
clear data;

list=dir(['C:\Programme\Matlab\FH Ingolstadt\Brigula\Meins','/*.wav']);
names={list.name};
%file='C:\Programme\Matlab\FH Ingolstadt\Brigula\Meins';
for i=1:20 % 20 Ist die Anzahl an Testsongs im obigen Ordner

%audio_input=fullfile(file,['test_Track' num2str(i) '.wav']) ;
audio_input= fullfile(names, '.wav') ;

data{i,:}=wavread(audio_input);
end


%jetzt ein neues lied lesen und vergleichen
[name path]=uigetfile('\*.wav');
test=wavread(fullfile(path,name));

for i=1:20
%if(data{i}(1:200)==test(1:200)) songs zu ähnlich am anfang
if(data{i}(300:1000)==test(300:1000)) % besser da Song in der "Mitte" verglichen wird
x=i;
break
end
end
disp(['Der eingelesene Track ist : ', (names)])

FS=44100 ;
player = audioplayer (test, FS);
play (player) ;
%sound ( test,FS);
Code:


Fehler is
??? Undefined function or method 'eq' for input arguments of type 'cell'.

Error in ==> fullfile at 37
if (f(end)==fs) & (part(1)==fs),
_________________

Ne is klar
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 17.06.2010, 19:26     Titel:
  Antworten mit Zitat      
mir ist aufgefallen in der if-schleife kann man sich den x sparen, stattdessen nur den 'i' benutzen.
Code:

 clear data;

 file='C:\Dokumente und Einstellungen\Besitzer\Desktop\ordner';
 list=dir([file,'/*.wav']);                          
 names={list.name};
for i=1:20  
     
    audio_input=fullfile(file,names{i}) ;  
    data{i}=wavread(audio_input);
end


[name path]=uigetfile('\*.wav');
test=wavread(fullfile(path,name));

for i=1:20
   
    if(data{i}(300:1000)==test(300:1000))
        break
    end
end
  disp(['Der eingelesene Track ist: ' names{i}])
 

_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
MatzeMeister
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 14.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2010, 19:35     Titel:
  Antworten mit Zitat      
hey is echt super funktioniert aber einen haken hab ich noch was mir aufgefallen ist...

und zwar musst du für die If schleifen wissen wieviele dateien du in deinem angegebenen ordner hast sonst gehts nicht
_________________

Ne is klar
Private Nachricht senden Benutzer-Profile anzeigen
 
MatzeMeister
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 14.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2010, 19:48     Titel:
  Antworten mit Zitat      
mir ist aufgefallen dass bei mir des was du mit der dir funktion geschrieben hast net wirklich funktioniert!?

da stimmen die angeklickten und ausgegebenen nimma überein
_________________

Ne is klar
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 17.06.2010, 19:50     Titel:
  Antworten mit Zitat      
das war natürlich eine sehr gute anmerkung , natürlich muss das programm das selber machen.
Code:

 clear data;

 file='C:\Dokumente und Einstellungen\Besitzer\Desktop\ordner';
 list=dir([file,'/*.wav']);                          
 names={list.name};
 anzahl=length(names);
for i=1:anzahl
     
    audio_input=fullfile(file,names{i}) ;  
    data{i}=wavread(audio_input);
end


[name path]=uigetfile('\*.wav');
test=wavread(fullfile(path,name));

for i=1:anzahl
   
    if(data{i}(300:1000)==test(300:1000))
        break
    end
end
  disp(['Der eingelesene Track ist: ' names{i}])
 


lustig wird es wenn du die songs in einem anderen ordner kopierst, umbennenst, und den testsong von diesem ordner einlesen, gucken ob matlab den richtigen namen hearusfindet ;)
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3  Weiter

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 - 2024 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.