Fachkundige und individuelle Beratung ist für uns selbstverständlich - rufen Sie uns an!
Sie erreichen unsere Hotline werktags von 10:00 bis 18:00 Uhr unter der 07171 8712 0 (Samstags: 10:00 bis 12:00 Uhr). Außerhalb Deutschlands wählen Sie +49 7171 87120. Im Dialog finden wir die optimale Klanglösung für Sie und klären etwaige Fragen oder Schwierigkeiten. Das nuForum ist seit dem 19. Juli 2023 im read-only-Modus: Das Ende einer Ära: Das nuForum schließt

Muss Party-Musik so schlecht klingen?

Fragen und Antworten zu Nubert Boxen in klassischer Zwei-Kanal-Anwendung
Antworten
Benutzeravatar
Frank Klemm
Star
Star
Beiträge: 2383
Registriert: So 22. Dez 2002, 19:59
Wohnort: Thüringen
Been thanked: 9 times

Muss Party-Musik so schlecht klingen?

Beitrag von Frank Klemm »

elchhome hat geschrieben:Was für einen SW Tongenerator nimmst du denn, oder benutzt du HW?
Ich werfe einen Editor an, schreibe ein paar Codezeilen, compiliere, führe das Programm aus und habe dann PCM-Dateien, mit der ich entweder CD-RWs oder Soundkarten beglücke. Einen Tag später weiß ich nicht mehr, wo die Quelldatei gelandet ist, weil die meist x.c oder y.c heißt.

Code: Alles auswählen

#include <stdio.h>
#include <math.h>

#ifndef M_PI
#define M_PI 3.14159265358979323844
#endif

static short 
double2int16 (double x )
{
    if ( x < -32768. )  return -32768 ;
    if ( x > +32767. )  return +32767 ;
    return (short) floor (x+0.5) ;
}

static void
calc ( const char* filename, const float* c, float fs, long samples )
{
    FILE* fp ;
    int i ;
    int j ;
    double sum ;
    short i16[2] ;

    fp = fopen ( filename, "wb" ) ;
    for ( i = 0; i < samples; i++ ) {
        sum = 0. ;

        for ( j = 0; coeff[j] != 0.; j += 2 )
            sum += sin (c[j] * 2. * M_PI * i / fs) * c[j+1] ;

        i16[0] = i16[1] = double2int16 ( 16000 * sum ) ;
        fwrite ( i16, 2, 2, fp ) ;
    }
    fclose (fp) ;
}

int main 
(void)
{
    static float f1[] = { 24, 0.5, 0 } ;
    static float f2[] = { 24, 0.5, 36, 0.16, 60, 0.05, 84, 0.02, 0 } ;
    static float f3[] = { 24, 0.5, 32, 0.16, 40, 0.08, 56, 0.05, 64, 0.03, 84, 0.02, 0 } ;

    calc ( "t1.pcm", f1, 44100., 44100*10 ) ;
    calc ( "t2.pcm", f2, 44100., 44100*10 ) ;
    calc ( "t3.pcm", f3, 44100., 44100*10 ) ;
    return 0 ;
}
Zuletzt geändert von Frank Klemm am Sa 25. Dez 2004, 21:52, insgesamt 3-mal geändert.
Benutzeravatar
elchhome
Star
Star
Beiträge: 2169
Registriert: Di 20. Mai 2003, 17:26
Wohnort: Plauen im Vogtland
Been thanked: 8 times

Beitrag von elchhome »

Danke Frank!
... dann werde mal mein linux anwerfen ...
SiMMenS
Star
Star
Beiträge: 696
Registriert: Fr 6. Aug 2004, 11:05
Wohnort: Wien

Beitrag von SiMMenS »

Sorry wegen der vielleicht blöden Frage (kenne den Thread ausm Off-Topic nicht), aber was isn das für ne Programmiersprache?!?! :?
Oder geht das nur im Linux? :oops:
Benutzeravatar
Master J
Star
Star
Beiträge: 5331
Registriert: Fr 25. Okt 2002, 12:16
Wohnort: Stuttgart
Been thanked: 9 times
Kontaktdaten:

Beitrag von Master J »

SiMMenS hat geschrieben:aber was isn das für ne Programmiersprache?!?! :?
C

Gruss
Jochen

P.S.: So kurze Antworten gebe ich sonst nicht ;)
nuSeum
- Billig ist blöd und Geiz macht gierig -
Mein Kram
Nomis
Semi
Semi
Beiträge: 103
Registriert: Mo 19. Jul 2004, 22:32
Wohnort: Emden
Kontaktdaten:

Beitrag von Nomis »

Hätte da auch mal eine Frage und zwar zu folgenden Zeilen

Code: Alles auswählen

i16[0] = i16[1] = double2int16 ( 16000 * val ) ;
        fwrite ( i16, 2, 2, fp ) ; 
Was ist "val"?
Was genau passiert bei "fwrite ( i16, 2, 2, fp )" ?

Nomis, der kleine Basic Programmierer, der von C nicht so die Ahnung hat.

PS: Muss das nicht "coeffs" und nicht "coeff"?!
[size=75]nubox 380+ABL, RS-300 angestöpselt an Pioneer VSX-814, Alesis RA-300. Hitachi PJ-TX200, Philips DVP720SA...usw.[/size]
Jay_R

Beitrag von Jay_R »

Nomis hat geschrieben:

Code: Alles auswählen

i16[0] = i16[1] = double2int16 ( 16000 * val ) ;
        fwrite ( i16, 2, 2, fp ) ; 
Was ist "val"?
Ich würde mal spekulieren, daß an dieser Stelle eigentlich "sum" statt "val" stehen soll.
Nomis hat geschrieben:PS: Muss das nicht "coeffs" und nicht "coeff"?!
Genau :wink:
Benutzeravatar
Koala
Star
Star
Beiträge: 5193
Registriert: Mo 12. Jan 2004, 12:49
Wohnort: Bielefeld

Beitrag von Koala »

Nomis hat geschrieben:Was genau passiert bei "fwrite ( i16, 2, 2, fp )" ?
man fwrite hat geschrieben:NAME
`fwrite'--write array elements...

DESCRIPTION
`fwrite' attempts to copy, starting from the memory location BUF,
COUNT elements (each of size SIZE) into the file or stream identified
by FP. `fwrite' may copy fewer elements than COUNT if an error inter-
venes.
greetings, Keita
Nomis
Semi
Semi
Beiträge: 103
Registriert: Mo 19. Jul 2004, 22:32
Wohnort: Emden
Kontaktdaten:

Beitrag von Nomis »

Danke!
Habe jetzt den passenden RealBasic Code gefunden, wenn's interessiert:

Code: Alles auswählen

binarystream.writeshort i16(0)
binarystream.writeshort i16(1)
Jetze bleibt nur noch die Frage, wie man das abspielt? VLC, QuickTime, Media Player & co wollen das nicht. Auch als Audio CD brennen mit Nero geht nicht. Wie kann man diese Rohdaten abspielen bzw. brennen?


unwissender Nomis. 8)
[size=75]nubox 380+ABL, RS-300 angestöpselt an Pioneer VSX-814, Alesis RA-300. Hitachi PJ-TX200, Philips DVP720SA...usw.[/size]
Benutzeravatar
BlueDanube
Star
Star
Beiträge: 6449
Registriert: So 10. Mär 2002, 22:24
Wohnort: Wien
Has thanked: 38 times
Been thanked: 82 times

Beitrag von BlueDanube »

Nur so zur Beruhigung für diejenigen, die des Programmierens nicht mächtig sind....

Mit einem Wave-Editor wie zB. Cool Edit geht das ohne besondere Kenntnisse in Sekunden.
Mit Cool Edit kann man einen Ton mit 5 Harmonischen (ohne Grundwelle bleiben 4) mit einem Menubefehl (Generate Tones) erzeugen.
Abgespeichert wird das als WAV-Datei, welche ganz einfach mit zB. Nero auf eine Audio-CD gebrannt werden kann.
Gruß
BlueDanube

nuVero140,nuLineCS40,RS6,NAD T778,Oppo BDP-103D,Humax ESd-160s,Technics SL-PS70,Epson EH-TW9400
nuLineCS150,Sony TA-FA3ES
nuBox311,Pro-Ject Stereo Box S2
nuPro A200,Akai EWI 5000,Dynasample XpressO
Nomis
Semi
Semi
Beiträge: 103
Registriert: Mo 19. Jul 2004, 22:32
Wohnort: Emden
Kontaktdaten:

Beitrag von Nomis »

Hallo,
Da ich heute mal wieder nichts zu tun hatte und ich den einsammen SourceCode so auf dem Desktop rumliegen sah hab ich mal das Programm zu Ende geschrieben, obwohl es mit BlueDanubes Lösung sicherlich einfacher gewesen wäre. ;)

Leider konnte ich keine Lösung finde wie man die Rohdaten so abspielen bzw. brennen kann. Das Problem hab ich damit gelöst indem ich "ganz einfach" einen WAVE-Header in die Datei schreibe - und es funktioniert sogar. 8)
So sieht sowas dann aus:

Code: Alles auswählen

    o=f.createbinaryFile("pcm wave")
    'HEADER############
    '2bytes per sample da writeSHORT!!!
    o.write "RIFF" '4
    o.littleEndian=true
    o.writelong (samples*2+44)-8 '4 2bytes per sample // Gesamtlänge der Datei-8byte
    o.littleEndian=false
    o.write "WAVE" '4
    '#################
    'Format
    o.write "fmt " '4
    o.littleEndian=true
    o.writelong 16 '4 Format Len PCM==16
    o.writeshort 1 '2 PCM
    o.writeshort 1'2 NumChannel
    o.writelong fs'4 Samplerate
    o.writelong fs*1*16/8 '4 SampleRate * NumChannels * BitsPerSample/8
    o.writeshort 1*16/8 '2 NumChannels * BitsPerSample/8
    o.writeshort 16 '2 16bit=> 2byte per sample == 16bit per sample
    'Formatlen==16
    '####################
    o.littleEndian=false
    o.write "data" '4
    o.littleEndian=true
    o.writelong samples*2 '4 2bytes per sample // Datenlänge
    '--------------------------------------------
    'Headerlen==44byte
    '##################
Ich will euch jetzt nicht weiter mit der Theorie langweilen ;). Darum hab ich hier mal eine mit dem Programm erzeugte Tondatei. Es handelt sich um 3 Schwebungen mit unterschiedlichen Schwebefrequenzen. Ein Hochgenuß für alle Sinne. :lol:

http://simonlooschen.spymac.net/generator/schweben.mp3


Und hier könnte ihr jetzt das tolle Programm runterladen:
http://simonlooschen.spymac.net/generator/generator.zip für Win
http://simonlooschen.spymac.net/generator/generator.sit für Mac OS X

und zum Schluss stell ich auch noch den SoruceCode zur Verfügung, mit dem ihr machen könnt was ihr wollt:
http://simonlooschen.spymac.net/generat ... source.zip RealBasic SourceCode

Noch viel Spaß damit,
Nomis.
[size=75]nubox 380+ABL, RS-300 angestöpselt an Pioneer VSX-814, Alesis RA-300. Hitachi PJ-TX200, Philips DVP720SA...usw.[/size]
Antworten