PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Lieder mit dem Soundbefehl



crusader
17.01.2005, 20:37
Hi,
wollte mal Fragen ob jemand schon ganze Lieder oder Teile von Liedern mit Bascom und dem Sound Befehl "komponiert" hat..

Dachte zum Beispiel an "Den Entrertainer". Hätte doch was, wenn der Robi bei erfolgreicher Erledigung einer Aufgabe den Entertainer pfeift.

Wenn jemand also Lust und Zeit hat... (Suche gerade die Tonfolge im Inet)
Oder noch besser, nen MIDI zu Bascom Konverter.
Könnte ja irgendwann mal ne ganze Sammlung hier präsentieren,
oder vielleicht gibts ja bald Robotertöne bei MTV zum download. 8-[

Gobstar
19.01.2005, 17:37
Würd mich auch interessieren :)

Gruss Stefan

albundy
19.01.2005, 18:18
Es gibt eine einfache Möglichkeit. Denkt doch mal an die ersten Mono Handyklingeltöne.
Die konnte man anhand von Buchstaben eintippen oder auch selber im Handy komponieren.
Die nennen sich emy (EMELODY) Klingeltöne.
Eine einfache Folge von Frequenzen mit einer bestimmten Dauer und Pausenzeiten.
Da gibt es bestimmt noch massig Lieder und Info's im Netz.

crusader
19.01.2005, 18:24
Hi,
diese einfache Möglichkeit setzt immer noch voraus, das man die Noten lesen kann, geschweige denn, erst mal die Notenblätter haben muss. Also bei mir scheitert es schon an Ersterem. :-k
Midi-Files sind ja nix anderes, kann ja sein, das irgendwer nen Konverter hat, um Midifiles quasi in RAW-Dateien umzuwandeln, in denen dann in Plaintext steht, welche Note wie lange.
Midifiles kriegt man ja zu Haufe im Inet nachgeworfen, bei Notenblättern wüsste ich nicht, wo ich suchen soll.

PicNick
19.01.2005, 18:48
Hi, Männer. Wenn mir einer erklärt, wie der Zusammenhang
Frequenz / Time
zu
Duration und Pulses (SOUND) funktioniert, laß' ich mal über MIDI to BASCOM Converter nachdenken mfg robert

albundy
19.01.2005, 18:53
Ich wußte gar nicht, dass man ins Handy Noten als Klingelton eingeben kann ???
Mal im Ernst, die emy Töne sehen etwa so aus:
#d #d #D p p p p c c
Dabei bedeutet "#" -> nächster Ton einen Halbton höher
soll heissen, wenn "d" normal 293 Hz hat und der nächste "e" 329 Hz wäre einen Halbton höher als "d" 293+18 = 311 Hz
Kleine Buchstaben "c,d,e,f,g,a" werden mit 150ms Länge wiedergegeben und Große Buchstaben "C,D,E,F,G,A" mit 300ms Länge.
Das kleine "p" bedeutet 150ms Pause.
Aber es gibt, wie gesagt jede Menge im Netz darüber.

PicNick
19.01.2005, 18:57
Auf die Art kommt mir der Beethoven ja bekannt vor. Aber wie ist das gleiche in sound-befehlen ?

albundy
19.01.2005, 19:08
Keine Ahnung, wie es mit dem Soundbefehl ist. Soweit ich gelesen habe ist die Frequenz nicht genau definiert.
Sound 100,1000 bedeute leider nicht Tonlänge 100ms und Frequenz 1000Hz. Aber wenn man das mit einem Tongenerator vergleichen könnte, wüsste mit welcher Frequenz man die 1000 vergleichen kann.

PicNick
19.01.2005, 19:14
e bien, vielleicht kann das einer der Interessenten abklären. Mir persönlich is ja lieber, wenn meine Computer keinen Mucks machen.
mfg robert

albundy
19.01.2005, 19:22
Übrigens PicNick, wenn du wüsstest, wie ein Midi aufgebaut ist, hättest du das

Frequenz / Time
zu
Duration und Pulses (SOUND) funktioniert, laß' ich mal über MIDI to BASCOM Converter nachdenken

sicher nicht geschrieben.

RCO
19.01.2005, 20:34
Also alle meine Entchen sollte man zum laufen kriegen, ich blick nur bei der Berechnung nicht durch.

Pulses = 250 ist ein hoher Ton
Pulses = 2000 ein niedriger

Aber welche Frequen haben die Töne, wie ist der Zusammenhang mit der Quarzfrequenz?
Hat nicht einer mal nen Frequenzmesser und kann für 2 Werte die Frequenz bestimmen, dann könnte man sich den Rest vermutlich denken. Bzw. wie errechnet sich Time? Time müsste einen Wert von 0,xxx oder so haben.

MFG Moritz

crusader
19.01.2005, 21:05
Hi,
ich bin am Freitag wieder an der FH und könnte das dann in Angriff nehmen.
Schreib mir doch bitte nen kurzes Programm, welche Töne Du haben willst.
Mache das mit RN-Control, nem ATMega32 und nem 16MHz Quarz. Hab noch nen 8er alternativ.

RCO
19.01.2005, 21:31
Also wenn ich jetzt keinen Denkfehler gemcht habe, müsste der Zusammenhang zwischen Frequenz und Pulse (also die komische Zahl die die Tonhöhe angibt) ungefähr so aussehen:

C[Konstante]/Frequenz[Hz]=Ton[in Bascom (Pulse)]

Ich hoffe jedemfalls mal, dass C auch konstant ist ;-)
Dazu bräuchte man am besten 2 oder 3 Wesswerte, vielleicht
Sound Portd.6 , 1000 , Ton
und für Ton dann mal 2000; 1000 und 500
Am besten wäre es natürlich noch, wenn man es mit verschiedenen Quarzen testen würde.
Außerdem ist mir nicht klar, wie sich Duration errechnet.
Wie lange Dauert
Sound Portd.6 , 1000 , 1000
genau?

Also es wäre super, wenn du das mal anchrechnen könnte, dann könnte man daraus ne Tonleiter aufstellen und dann Liedchen schreiben ;-)


MFG Moritz

EDIT:

Das Beispiel aus der Hilfe erzeugt bei mir übrigens nur ein klacken.
Richtige Töne krieg ich nur mit sowas raus:
Sound Portd.6 , 1000 , 1000

RCO
19.01.2005, 22:28
Also "Alle meine Entchen läuft" ;-)

Hier mal das Programm:


Do
Sound Portd.6 , 130 , 1916
Sound Portd.6 , 146 , 1706
Sound Portd.6 , 164 , 1520
Sound Portd.6 , 174 , 1433
Sound Portd.6 , 293 , 1276
Sound Portd.6 , 6250 , 10
Sound Portd.6 , 293 , 1276
Sound Portd.6 , 6250 , 10
Sound Portd.6 , 200 , 1136
Sound Portd.6 , 450 , 10
Sound Portd.6 , 200 , 1136
Sound Portd.6 , 450 , 10
Sound Portd.6 , 200 , 1136
Sound Portd.6 , 450 , 10
Sound Portd.6 , 200 , 1136
Sound Portd.6 , 450 , 10
Sound Portd.6 , 783 , 1276
Sound Portd.6 , 200 , 1136
Sound Portd.6 , 450 , 10
Sound Portd.6 , 200 , 1136
Sound Portd.6 , 450 , 10
Sound Portd.6 , 200 , 1136
Sound Portd.6 , 450 , 10
Sound Portd.6 , 200 , 1136
Sound Portd.6 , 450 , 10
Sound Portd.6 , 783 , 1276
Sound Portd.6 , 170 , 1433
Sound Portd.6 , 450 , 10
Sound Portd.6 , 170 , 1433
Sound Portd.6 , 450 , 10
Sound Portd.6 , 170 , 1433
Sound Portd.6 , 450 , 10
Sound Portd.6 , 170 , 1433
Sound Portd.6 , 450 , 10
Sound Portd.6 , 325 , 1520
Sound Portd.6 , 500 , 10
Sound Portd.6 , 325 , 1520
Sound Portd.6 , 500 , 10
Sound Portd.6 , 145 , 1706
Sound Portd.6 , 450 , 10
Sound Portd.6 , 145 , 1706
Sound Portd.6 , 450 , 10
Sound Portd.6 , 145 , 1706
Sound Portd.6 , 450 , 10
Sound Portd.6 , 145 , 1706
Sound Portd.6 , 450 , 10
Sound Portd.6 , 261 , 1916
Wait 2
Loop

Das ganze ist aber Quarz-abhängig ich habs mal unter 4 und 10 Mhz laufen lassen:
Unter 4: langsam
Unter 10: wie diese kleinen Aufklappkarten
Leider schluckt das Programm in dieser Struktur ganze 66% meine 2313ers.
Allerdings ist die Struktur ja nicht besonders sinnvoll. Das aufwendige daran ist vermutlich der Soaundbefehl, vielleicht könnte man dazu eine besser Funktion schreiben, die auch die blöde Tonlängenberechnung ersetzt, z.B. Ton(C, 4)
Also ton C und eine viertel lang. Dazu müsste man nur ein par Constanten benennen und ein par Berechnungen machen. Dann ist das Programm mit Sicherheit übersichtlicher und kleiner. Aber heute Abend habe ich dazu keine Lust mehr.

MFG Moritz

PicNick
20.01.2005, 06:37
@albundy
Du bist offensichtlich ein schlaues Kerlchen mit wahrem Durchblick.
Toll, so Leute im Forum zu haben. mfg robert

albundy
20.01.2005, 15:36
Ich habe mal die Sound-Pulszeiten mit einem Tongenerator über Soundkarte verglichen. Die Werte sind also nur durch akustischen Vergleich entstanden. (Es war nicht leicht Sinus mit Rechteck zu vergleichen)
Die Impulslänge im Soundbefehl war trotz fest eingestelltem Wert, bei jeder getesteten Pulszeit anders. Wobei ich nicht sagen kann, ob der Wert linear angestiegen ist.
Quarz = 4MHz

Sound Ausgabe,1000,500 -> 670 Hz Tonlänge etwa 4 Sek
Sound Ausgabe,1000,600 -> 560 Hz
Sound Ausgabe,1000,1000 -> 325 Hz
Sound Ausgabe,1000,1200 -> 280 Hz
Sound Ausgabe,1000,1500 -> 220 Hz Tonlänge etwa 6 Sek

Die Werte sind nicht mal umgekehrt proportional, sodass man sich auch keine Zwischenwerte ausrechnen kann.

RCO
20.01.2005, 16:03
Also ich habe mal ne Linearisierung gemcht und der Zusammenhang ist wie ich vermutet habe:
Pulse=C / Frequenz
Pulse ist dabei der Ton
C eine Konstante und Frequenz der eigentliche Ton in Hz.
Bei C komme ich durchschnittlich auf 332400.
Leider sind da einige Schwankungen drin, wäre schön, wenn wir aufs Hz genaue Werte hätten.

Die Tonlänge steht mit dem ganzen ebenfalls in Zusammenhang.
Wenn du Duration x Pulse nimmst, kommst du auf C. Daher stimmt auch die Aussage 4 und 6 Sec. D.h. aber auch, dass man für jeden Ton eine bestimmte Duration nehemn muss, wie in meinen Lied oben. Dieser ließe sich natürlich über C leicht errechnen (von einem Programm).
Schön wäre, wenn man mal rausbekäme, bei welchem wert genau 1 sec. ist. Hätte ich doch nen Oszi oder so da.

MFG Moritz

raptor_79
03.02.2005, 20:24
hallo!

ihr redet vom quarz.
leider bin ich ein anfänger, und hab keine ahnung, was ich im basecom bei den fusebits einstellen muß, um einen 16 mhz quarz zu verwenden.
kann mir das mal einer bitte möglichst genau sagen. ich hab schon überall nachgesehen, und einen atmega32 zerstört.
wäre eine super sache, auch wenns nicht zum thema passt.

danke schon mal

crusader
03.02.2005, 21:06
guckst du mal hier:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=4480

hoffe das hilft dir

edgar
05.02.2005, 08:31
kennt jemand einen kleinen, evtl. piezo schallwandler, der ähnlich wie ein lautsprecher funktioniert? ich hab bis jetzt nur solche gesehen die eine feste Frequenz haben.
gruß werner...

heinzi
12.11.2005, 13:45
@edgar:
guck mal bei reichelt: Summer BM 15B, Summer EPM 121, Summer BJM 05.
den ersten verwende ich auch. kostet 69 cent.

------------



Hi, Männer. Wenn mir einer erklärt, wie der Zusammenhang
Frequenz / Time zu Duration und Pulses (SOUND) funktioniert, ...


Soweit ich gelesen habe ist die Frequenz nicht genau definiert.
Sound 100,1000 bedeute leider nicht Tonlänge 100ms und Frequenz 1000Hz.


Aber welche Frequen haben die Töne, wie ist der Zusammenhang mit der Quarzfrequenz?


Die Tonlänge steht mit dem ganzen ebenfalls in Zusammenhang.
Wenn du Duration x Pulse nimmst, kommst du auf C.

ich habe handypiepsen per mikro aufgenommen und per wavelab die frequenz analysiert:

2130hz für 65ms
pause 60ms
2130hz für 65ms
pause 60ms
2840hz für 110ms

danach habe ich es in bascom eingetragen:


$regfile = "m8def.dat"
$crystal = 1000000
Enable Interrupts
Config Portd.6 = Output
Do
Sound Portd.6 , 65 , 2130
Waitms 60
Sound Portd.6 , 65 , 2130
Waitms 60
Sound Portd.6 , 110 , 2840
Loop
End

das hört sich total grauenhaft an!!!
wie wäre denn eine lösung per timer (rnavr)?
https://www.roboternetz.de/phpBB2/dload.php?action=file&file_id=169 (autor:frank). die verwendung des timers wird wohl etwas überzogen sein (super geeignet um eine sendefrequenz für ir-dioden zu erhalten!)

Bascom: The SOUND statement is not intended to generate accurate frequencies. Use a TIMER to do that.

vielleicht könnte frank ein prog schreiben, welches den soundbefehl (die gewünschte frequenz und länge in abhängigkeit des verwendeten quarzes) berechnen könnte?

wichtige frage von mir: kann man den soundbefehl auch an mehreren pins ausgeben? irgendwie so:
Sound xpins , 2130 , 65
xpins alias portd.3, portd.4, port.d5

Ratber
12.11.2005, 19:58
Zu Polyphon:

Nein.
Bascom bearbeitet auch nach wie vor nur einen Befehl gleichzeitig.
Es wird also alles nacheinander abgespielt.


Zu "Sound" Befehl:

Sound Pin,Anzahl der Pulse,Zeitdauer der einzelnen Impulse.

Umständlicher hätte man den Sundbefehl kaum noch machen können.
Kein sinvolles Schema
Stark abhängig vom Systemtakt.

Ich habs vor 2 Jahren mal spaßeshalber Probiert und nach einigen Tagen entnervt aufgegeben.

Seitdem verwende ich ne externe Lösung für "Klang".
Je nachdem was gefordert wird vom einfachen geschaltete Piezo ,über einfache Soundchips alla Sid,Samples aus nem Externen E(E)Prom/Flash,ISD's bis zum MP3-Chip mit eigenem Speicher.


Alles nervenschonender als dieses Kukucksei von MCSelec '-)

Marco78
11.12.2005, 21:11
Ich habe Sound Portd.6 , 100 , 10 als Sekundenklacken bei meiner gLCD-Uhr an der ich grade sitze.
Um zu schauen was der Sound-Befehl sonst noch bietet habe ich mal die Suche hier bemüht.
Und diesen Beitrag gefunden.

Respekt @RCO. Das war sicherlich eine lange arbeit.
Die Melodie habe ich z.Zt. als Stundensignal.
Nur leider wird der Sekundentimer damit unterbrochen. Die Zeit hält solange an wie das Lied läuft :(

Naja, das ganze Programm ist im Moment auch noch unvorteilhaft programmiert. Das meiste spielt sich in der ISR ab. Das mag der Grund sein, warum die Zeit anhält.

Wenn ich wieder Zeit habe werde ich das nochmal umschreiben.

Ich wollte auch nur nochmal den Beitrag nach oben schieben in der Hoffnung, das sich jemand Gedanken gemacht hat, wie man eine Melodie einfacher abspielen kann ;)

Jon
05.05.2007, 15:56
Jetzt grabe ich mal den Thread aus :)
Ich habe dein Programm mal übernommen, RCO.
Kann ich nur eines sagen: *Respekt*!!
Ich habe nur noch nicht verstanden, wie du das geschafft hast.
Kannst du das nochmal erklären, wenn möglich so, dass ich das auch verstehe?

jon

Jon
05.05.2007, 19:36
Ich habe das Teil jetzt dazu gebracht Bruder Jakob zum Teil zu spielen.
Mit dem b,c und d habe ich nur ein Problem *g*

Der Code:

Sound Portc.7 , 164 , 1520 'f
Sound Portc.7 , 174 , 1433 'g
Sound Portc.7 , 183 , 1276 'a
Sound Portc.7 , 164 , 1520 'f
Sound Portc.7 , 450 , 10 'pause
Sound Portc.7 , 164 , 1520 'f
Sound Portc.7 , 174 , 1433 'g
Sound Portc.7 , 183 , 1276 'a
Sound Portc.7 , 164 , 1520 'f
Sound Portc.7 , 183 , 1276 'a
End

jon

Ratber
05.05.2007, 22:51
Mit dem b,c und d habe ich nur ein Problem *g*



Warum ?

helimike0705
06.05.2007, 12:07
habe dies schon vor langer zeit mal gefunden bei der kongurenz.der beitrag für ein bascom beispiel ist weiter unten im tread ,mit einem 4433
realiesiert,lässt sich aber bestimmt auf einen neueren mega8 umschreiben.
http://www.mikrocontroller.net/topic/6502#new
hoffe der link funktioniert

Jon
06.05.2007, 12:52
Mit dem b,c und d habe ich nur ein Problem *g*



Warum ?
Ich finde die richtigen Töne nicht.
Soll heißen, dass ich die anderen Töne aus dem Beispiel von RCO übernommen habe. Nun habe ich aber kein vorgefertigtes b, c und d und wollte ganz gerne wissen, wie ich den richtigen Ton rechnerisch ermittel, also ohne viel Experimentieren.

Wäre schön, wenn mir da jemand auf die Sprünge helfen kann.

jon

Ratber
06.05.2007, 13:01
da kann ich dir auch nicht helfen.

Wie oben schon gesagt hab ich es schnell wieder dran gegeben mich mit dieser Hirnrissigen Methode abzukämpfen.
Monophone Töne mah ich übern Timer und für alles andere gibt es reichlich Chips.

Jon
06.05.2007, 13:05
Ich hoffe einfach mal, dass sich RCO meldet. Irgendwie muss er es ja geschafft haben.

jon

RCO
22.05.2007, 19:23
Hi Jon,

ich weiß leider auch nicht mehr so genau, was ich damals gemacht habe.
Hier sind auf jeden Fall mal zwei Bas-Dateien, die ich davon noch gefunden habe. Ich kann dir aber leider nicht erklären, was da was genau macht, und warum ich das so gemacht habe.



$Crystal = 10000000

Do
Sound Portd.6 , 130 , 1916
Sound Portd.6 , 146 , 1706
Sound Portd.6 , 164 , 1520
Sound Portd.6 , 174 , 1433
Sound Portd.6 , 293 , 1276
Sound Portd.6 , 6250 , 10
Sound Portd.6 , 293 , 1276
Sound Portd.6 , 6250 , 10
Sound Portd.6 , 200 , 1136
Sound Portd.6 , 450 , 10
Sound Portd.6 , 200 , 1136
Sound Portd.6 , 450 , 10
Sound Portd.6 , 200 , 1136
Sound Portd.6 , 450 , 10
Sound Portd.6 , 200 , 1136
Sound Portd.6 , 450 , 10
Sound Portd.6 , 783 , 1276
Sound Portd.6 , 200 , 1136
Sound Portd.6 , 450 , 10
Sound Portd.6 , 200 , 1136
Sound Portd.6 , 450 , 10
Sound Portd.6 , 200 , 1136
Sound Portd.6 , 450 , 10
Sound Portd.6 , 200 , 1136
Sound Portd.6 , 450 , 10
Sound Portd.6 , 783 , 1276
Sound Portd.6 , 170 , 1433
Sound Portd.6 , 450 , 10
Sound Portd.6 , 170 , 1433
Sound Portd.6 , 450 , 10
Sound Portd.6 , 170 , 1433
Sound Portd.6 , 450 , 10
Sound Portd.6 , 170 , 1433
Sound Portd.6 , 450 , 10
Sound Portd.6 , 325 , 1520
Sound Portd.6 , 500 , 10
Sound Portd.6 , 325 , 1520
Sound Portd.6 , 500 , 10
Sound Portd.6 , 145 , 1706
Sound Portd.6 , 450 , 10
Sound Portd.6 , 145 , 1706
Sound Portd.6 , 450 , 10
Sound Portd.6 , 145 , 1706
Sound Portd.6 , 450 , 10
Sound Portd.6 , 145 , 1706
Sound Portd.6 , 450 , 10
Sound Portd.6 , 261 , 1916
Wait 2
Loop


Und:



$baud = 19200
Const Konstante = 332400
Const Zeitkonstante = 332400 'Konstante f¸r ganze Note (Hier = Konstante)
Const C = 261
Const D = 293
Const Pause = 10
Dim Duration As Long
Dim Puls As Long
Print "Hallo"
Declare Sub Play(byval Noten As Word , Byval Wert As Byte)

Do
Call Play(c , 8)
Wait 1
Loop
End

Sub Play(byval Noten As Word , Byval Wert As Byte)

Puls = Konstante / Noten
Duration = Zeitkonstante / Puls
Print Puls
Print Duration
Duration = Duration / Wert
Print Duration
Sound Portd.6 , Duration , Puls
Sound Portd.6 , 1000 , 10


End Sub


Ich hoffe, es hilft dir irgenwie weiter ;-)

Jon
22.05.2007, 19:31
Ich werde es mir nochmal genauer anschauen. Im Moment habe ich nicht die Zeit dazu.
Aber trotzdem schade, dass du nicht mehr weißt, wie du das gemacht hast.
Vielleicht finde ich es ja heraus ;)

jon