AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Mein Computer pfeift Lapaloma - Aber wie? -->Windows.Beep
Thema durchsuchen
Ansicht
Themen-Optionen

Mein Computer pfeift Lapaloma - Aber wie? -->Windows.Beep

Ein Thema von Fussel9 · begonnen am 9. Feb 2010 · letzter Beitrag vom 11. Feb 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Fussel9
Fussel9

Registriert seit: 25. Mai 2009
322 Beiträge
 
Turbo Delphi für Win32
 
#1

Mein Computer pfeift Lapaloma - Aber wie? -->Windows.Beep

  Alt 9. Feb 2010, 19:10
Hi ich hab mir zu Windows.Beep mal einiges durchgelesen, aber habe eine rudimentäre Frage:

Wenn ich ein Lied damit spielen lassen möchte, muss ich dann jeden Ton kennen?
Wäre es nicht möglich die Frequenzen aus einem Lied herrauslesen zu lassen, wie auch immer das gehen könnte?
Und was genau ist eigendlich BPM also die Beats per Minute und was mache ich damit?

Hoffe ihr könnt mir weiterhelfen...

Ich wollte ein Programm schreiben welches die Frequenzen und die BPM, sofern ich die brauche in eine Ini- oder Txt-Datei einließt und dann ein zweites welches die Frequenzen und co. aus der txt ausließt und dann mit Windows.Beep abspielt.
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Mein Computer pfeift Lapaloma - Aber wie? -->Windows.

  Alt 9. Feb 2010, 19:18
Textdateien sind da nicht so sinnvoll. Speichere es binär!

Hier zum Laden:
Delphi-Quellcode:
type
  TTon = record
    Frequenz: Word;
    BPM: Word;
  end;
  TLied = array of TTon;
  TNotenblatt = file of TTon;
var
  f: TNotenblatt;
  l: TLied;
  t: TTon;
begin
  AssignFile(f, 'Lieddatei');
  Reset(f);
  while not eof(f) do begin
    Read(f,t)
    SetLength(l,Length(l)+1);
    l[Length(l)-1] := t;
  end;
  CloseFile(f);
end;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#3

Re: Mein Computer pfeift Lapaloma - Aber wie? -->Windows.

  Alt 9. Feb 2010, 19:24
Du kannst dir die Töne auch umrechnen und ausgeben lassen.
http://www.delphipraxis.net/internal...t.php?t=168363

BPM sind praktisch "Noten pro Minute"

Notendauer + Pausendauer = 1 Minute / BMP
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Mein Computer pfeift Lapaloma - Aber wie? -->Windows.

  Alt 9. Feb 2010, 20:00
Just for Info:
* ein kleines Liedchen mit Windows.Beep abspielen
Schwierigkeitsgrad: sehr einfach
* Noten in Frequenzen umrechnen
Schwierigkeitsgrad: einfach, Frequenzen kann man mit 12. Wurzel von 2 leicht ausrechnen
* ein Liedchen monophon über Soundkarte oder MIDI abspielen
Schwierigkeitsgrad: einfach bis mittel
* ein Liedchen polyphon über MIDI abspielen
Schwierigkeitsgrad: mittel
* Frequenzen aus einem Lied herrauslesen
Schwierigkeitsgrad: hoch bis sehr hoch
* Beats per Minute ermitteln
Schwierigkeitsgrad: hoch bis sehr hoch
* Frequenzen aus einem Lied zurück in Notenschrift verwandeln
Schwierigkeitsgrad: extrem hoch bis fast unmöglich

Damit sollte klar sein, welche Probleme du bewältigen kannst und welche nicht.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Fussel9
Fussel9

Registriert seit: 25. Mai 2009
322 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Mein Computer pfeift Lapaloma - Aber wie? -->Windows.

  Alt 9. Feb 2010, 20:20
Zitat von implementation:
Delphi-Quellcode:
begin
  AssignFile(f, 'Lieddatei');
  Reset(f);
  while not eof(f) do begin
    Read(f,t)
    SetLength(l,Length(l)+1);
    l[Length(l)-1] := t;
  end;
  CloseFile(f);
end;
Ich versteh das Read nicht ganz:
Aus F (also z.B. Test.mp3) wird in T gelesen (Also TTon)

Wo wird denn bestimmt was er wo einließt also wo Steht, dass er t.Frequenz einen wert zuweisen soll?

!€!D!|!T :

Ab einem bestimmten Punkt derden Frequenz und Length nur noch 0 zugewiesen obwohl das lied noch nicht vorbei ist....

EDIT2:

Ok, ich habe es jetzt so programmiert:
Delphi-Quellcode:
unit UMain;

interface

uses
  IniFiles, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    BLoad: TButton;
    PB: TProgressBar;
    TWait: TTimer;
    BSave: TButton;
    procedure BLoadClick(Sender: TObject);
    procedure TWaitTimer(Sender: TObject);
    procedure BSaveClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    procedure Laden;
    procedure Speichern;
  end;

type
  TTon = record
    Frequenz: Word;
    BPM: Word;
  end;

TLied = array of TTon;
TNotenblatt = file of TTon;

var
  f: TNotenblatt;
  l: TLied;
  t: TTon;
  Save: TIniFile;
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.BLoadClick(Sender: TObject);
begin
Laden;
end;

procedure TForm1.BSaveClick(Sender: TObject);
begin
Speichern;
end;

procedure TForm1.Laden;
begin
PB.Position:=0;
  AssignFile(f,'Test.mp3');
  Reset(f);
  while not eof(f) do begin
    PB.StepBy(1);
    Read(f,t);
    SetLength(l,Length(l)+1);
    l[Length(l)-1] := t;
  end;
  CloseFile(f);
PB.Position:=100;
TWait.Enabled:=TRUE;
end;

procedure TForm1.Speichern;
begin
PB.Position:=0;
Save:=TIniFile.Create('save.ini');
  while not (Length(l)=0) do
    begin
      PB.StepBy(1);
      Save.WriteInteger('Lied','Frequenz',l[1].Frequenz);
      Save.WriteInteger('Lied','BPM',l[1].BPM);
      SetLength(l,Length(l)-1);
    end;
Save.Free;
PB.Position:=100;
TWait.Enabled:=TRUE;
end;

procedure TForm1.TWaitTimer(Sender: TObject);
begin
PB.Position:=0;
TWait.Enabled:=False;
end;

end.
Das dauert schon ziehmlich lange bis der mit Laden fertig ist,
aber noch SEHR viel länger um mit Speichern fertig zu werden....

Warum ist das so, mache ich was falsch?

Ps: Was genau meintest du damit das ich es Binär abspeichern sollte?
  Mit Zitat antworten Zitat
Benutzerbild von Fussel9
Fussel9

Registriert seit: 25. Mai 2009
322 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Mein Computer pfeift Lapaloma - Aber wie? -->Windows.

  Alt 9. Feb 2010, 22:10
Das mit der Wiedergabe geht auch nicht:
Meine frage bezüglich der BPM war auch, was soll ich damit machen....
Wenn ich BPM als tonlänge angebe kommt ein konstanter Ton
gebe ich etwas anderes an kommt ein komisches gewirr...

Weiß irgendjemand noch was zu dem thema?
  Mit Zitat antworten Zitat
hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Mein Computer pfeift Lapaloma - Aber wie? -->Windows.

  Alt 9. Feb 2010, 22:17
Hast du dir mal angeschaut, was die Befehle denn so machen bzw. dir mal alle Antworten die du bekommen hast durchgelesen.

Was soll das denn deiner Meinung nach machen?

Delphi-Quellcode:
procedure TForm1.Laden;
begin
PB.Position:=0;
  AssignFile(f,'Test.mp3');
  Reset(f);
  while not eof(f) do begin
    PB.StepBy(1);
    Read(f,t);
    SetLength(l,Length(l)+1);
    l[Length(l)-1] := t;
  end;
  CloseFile(f);
PB.Position:=100;
TWait.Enabled:=TRUE;
end;
Ich denke mal, dass du damit die MP3-Datei in die einzelnen Töne umwandeln möchtest. Wenn du dich aber mal ein wenig damit auseinander gesetzt hättest, was denn di Befehle machen, wärst du warscheinlich schnell darauf gekommen, dass das nichts wird.
Der Read-Befehl befüllt t mit 4 Byte (siehe Record TTon -> 2 x Word -> 2 x 2 Byte) aus der Datei. Eine MP3-Datei ist aber nicht im geringsten so aufgebaut, das immer ein Word für die Frequenz und ein Word für die Länge aufeinander folgen. Schon allein, dass allgemein bekannt sein sollte, das MP3-Dateien kompriemierte Informationen beinhalten sollte zeigen, dass dein Vorhaben so nicht funktionieren kann.
Und bevor du noch weiter versuchst, an die Noten einer MP3-Datei zu kommen, möchte ich dir nur sagen, dass du da definitiv kläglich scheitern wirst. Es gibt da ein Projekt vom Frauenhofer Institut, welches sich damit beschäftigt, was hauptsächlich darum geht, von einer vorgespielten Melodie zu erkennen, welches Lied es ist. Im Hintergrund müssen dafür aber die Töne auch entsprechend bestimmt werden. Und die Leute die da sitzen, haben sich da jahrelang mit beschäftigt und haben bestimmt um einiges mehr Ahnung auf diesem Gebiet als du.
Schau lieber, dass du so irgenwo Noten her bekommst, welche du dann in eine Datei mit dem hier vorgeschlagenen Format speichern kannst. Da wirst du mehr Freude dran haben.
  Mit Zitat antworten Zitat
Benutzerbild von Fussel9
Fussel9

Registriert seit: 25. Mai 2009
322 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Mein Computer pfeift Lapaloma - Aber wie? -->Windows.

  Alt 9. Feb 2010, 22:24
Ich will ja eigendlich gar nicht die NOTEN ... alles was ich wollte war, eine Musik-Datei welchen Formates auch immer in eine Textdatei einzulesen, damit ich sie jederzeit, ohne die Musikdatei zu haben mit Windows.Beep abspielen kann.

Z.B.: Ich nehme das Adamsfamilytheme kann ich in alle Formate umwandeln...

alles was ich nun will ist das so zu 'lesen' das ich es mit Windows.Beep abspielen kann.
  Mit Zitat antworten Zitat
hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Mein Computer pfeift Lapaloma - Aber wie? -->Windows.

  Alt 9. Feb 2010, 22:29
Um es mit Windows.Beep abspielen zu können, benötigst du aber die Noten bzw. die Frequenz und die Länge eines Tones und bekommst du nicht aus normalen Musikdateien. Du könntest du mal mit dem MIDI-Format auseinander setzen, da sollten diese Informationen enthalten sein.
  Mit Zitat antworten Zitat
Benutzerbild von Fussel9
Fussel9

Registriert seit: 25. Mai 2009
322 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Mein Computer pfeift Lapaloma - Aber wie? -->Windows.

  Alt 9. Feb 2010, 22:33
Ich habe die Datei auch als Midi vorliegen ... bzw kann dementsprechend konvertieren, mit externen programmen...

Wie funktionieren denn diese?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:25 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