Jump to content

AVR-Synthesizer "WAVE 1"


rolfdegen
 Share

Recommended Posts

Hallo

 

Nach längerer Abwesenheit aus familiären Gründen melde ich mich Heute wieder zurück. Die Hardware ist fast fertig. Was fehlt ist noch ein analoger Audioeingang, um externe Audiosignale über den Filter und VCA zu mischen.

Das werde ich Heute auf die Platine löten. Dann werden die Schaltpläne für das Platinen Layout erstellt. Das Layouten übernimmt dann ein Freund. In der Zwischenzeit werkel ich noch ein wenig an der Software.

 

Bis dahin lieben Gruß aus Wuppertal :)

 

 Hello 

 
After a long absence due to family reasons I sign today back. The hardware is almost ready. What is missing is still an analog audio input to mix external audio signals via the filter, and VCA. 
Today I will solder on the board. Then the schematics for the circuit boards layout are done. Doing layout is handled by a friend. In the meantime, I Werkel a little more on the software. 
 
Until then, love greeting from Wuppertal in Germany
 
Link to comment
Share on other sites

  • 3 weeks later...

Hallo zusammen..

Wochenend ist Hobbyzeit.. und das bedeutet Weiterentwicklung an meinem Synthesizer. Heute gab es ein Update für meine Entwicklungsumgebung (ATMEL STUDIO 6.2 build 1153). Mal schaun was geändert wurde. Nächste Woche steht dann ein Hardware Update meines Computers an. Ich will die System Festplatte durch eine Samsung 840 EVO SSD 250GB ersetzen.

Synthesizer Projekt
Mit der Menüoberfläche fürs Laden der Sounds bin ich noch nicht ganz einverstanden. Gefällt mir irgendwie nicht. Aus dem Mutable Forum gabs mal wieder gute Tips. Sollte das Menü vlt. anders bennenne. Statt "Play Sound" lieber "Load Presets". Werde das mal überdenken und Heute ein paar Änderungen testen.

Gruß Rolf 

Link to comment
Share on other sites

  • 4 weeks later...

Hallo zusammen..

Hab ein langes Wochenende vor mir und viel Zeit zum programmieren.
Für die Soundverwaltung und das Laden von Waves und Samples habe ich jetzt eine gute Lösung gefunden. In Bank 00 befinden sich die festen Wellenformen wzB. Saw, Sinus, Rechteck u.a. (max. 128 ) Diese werden bei der Auswahl mit dem Encoder sofort geladen und auf dem Display dargestellt. In Bank 01-99 befinden sich die ganzen Samples (max. 12672 ). Die Samples werden als Text Liste dargestellt und können über die Load-Taste geladen werden. Für die grafische Darstellung und Einstellungen eines Samples geht man dann auf eins von vier Supmenu Seiten der Oscillator Page.

 

Hi ..

I have a long weekend and a lot of time for programing my synth. 
For the sound management and loading of Waves and samples I have now found a good solution. In bank 00 are the fixed waveforms Saw, Sine, Square and more (max. 128) These are loaded immediately when selecting the encoder and displayed on the screen. In Bank 01-99 are all the sample files (max. 12672). The samples are shown as a text list and can selected with “Load†button. For the graphical representation and edit of sample then goes to the Supmenu Pages of Oscillator.


Auswahl eines Sound Program
Sound_%20Program.jpg


Auswahl einer Wellenform
Wellenform.jpg


Auswahl eines Sample
Sample.jpg


Ordnerstruktur auf der SD Karte
File1.jpg
File2a.jpg
File3.jpg


PS: Es geht voran bueb.gif 

Gruß Rolf 

Link to comment
Share on other sites

Hallo Rolf,

es ist wirklich interessant, deinem Synth beim Erwachsenwerden zuzusehen!

Mich würde noch interessieren, auf was sich die Bautteilkosten

beim aktuellen Stand des Gerätes belaufen?

Gruß

Marxon

Edited by Marxon
Link to comment
Share on other sites

  • 3 weeks later...

So.. mir ist gerade ein guter Name für meinen Synthesizer eingefallen:

"DeWave 1.0"
Die ersten beiden Buchstaben sind aus meinem Familien Namen "Degen". Das "Wave" im Namen soll die verschiedenen Wellenformen und Samples im Synthesizer symbolisieren.

 

Ich bin gerade dabei einen Programmabschnitt zu programmieren, der es ermöglicht, eine 16Bit WAVE-Datei von der SD Karte in den Synthesizer zu laden und dann als 8Bit Sample abzuspielen. Eigentlich ist eine WAVE-Datei ganz simpel aufgebaut. Am Anfang der WAVE-Datei ist ein Haeder bestehend aus 44 Byte, in dem z.B. das Format, Bitbreite und Samplerate gespeichert sind. Diese Header-Daten werden vom Synthesizer im Moment noch ignoriert. Nach den Header-Daten folgen die eigentlichen Sample-Daten. Diese sind bei einer 8Bit Wave-Datei vorzeichenlos (unsigned). Bei 16Bit bestehen sie aus 2Byte mit Vorzeichen. Das erste Byte ist das Low-Byte gefolgt vom High-Byte mit Vorzeichen. Um aus den 16Bit jetzt ein Vorzeichenloses Byte für den Synthesizer zu generieren reicht es aus, das Low-Byte einfach fallen zu lassen und das High-Byte mit 128 zu addieren.

Das WAVE Format

 

WAVFormat.jpg

 

Hier ein C-Code Beispiel für meinen Synth

// set folder ---------------------------------------------------------
    uint8_t error_status = 0;
    ffcd("");
    ffcd("SAMPLE");ffcd(foldername);
    
    // open file ----------------------------------------------------------    
    if( MMC_FILE_OPENED == ffopen(sample_name,'r'))
    {
        uint32_t file_len = file.length; 
        // set baseaddress sram
        hugemem_ptr_t   p;
        uint32_t base = BOARD_EBI_SRAM_BASE; // 0x800000UL
        uint_fast8_t    data = 0;
        uint32_t offset = 0x00000;
        p=(hugemem_ptr_t)((uint32_t)base + offset);
        uint8_t sample; 
        
        // load WAVE-File 16Bit signed Little-endian / Low-byte first -----
        // Sample-Bank 01-99
        
            // skip Header from WAVE-File
            for (uint8_t i = 0; i < 44; i++)
            {
                sample = ffread();
            }
            
            file_len = ((file_len - 44) / 2);
            
            
            for (uint32_t i = 0; i < file_len; i++)
            {
                sample = ffread();            // load L-Byte and ignore
                sample = ffread();            // load H-Byte
                sample = sample + 128;        // convert in unsigned 8Bit
                hugemem_write8(p+i, sample);  // write Sample in SRAM
            }
Edited by rolfdegen
Link to comment
Share on other sites

Bisher war es in meinem Synthesizer nur möglich Wave-Dateien in Mono zu laden. Ich möchte dieses Wochenende nutzen, um auch Stereo Dateien in meinen Synth zu laden. Ferner möchte ich die Auflösung von 8Bit auf 12Bit erhöhen. Das entspricht der maximalen Auflösung der DA-Wandler im Xmega Chip.

Im Header einer Wave-Datei sind zB. auf Adresse 0x16 die Informationen über die Anzahl der Kanäle gespeichert. Bei Mono hat die Adresse 0x16 den Wert 1 und bei Stereo den Wert 2.


Bedeutung der Daten im Header
WavHeader.jpg
Quelle: Wikipedia


Gruß Rolf 

Link to comment
Share on other sites

NoiseShaping.jpg

 

C-Code little Noise Shaping

// skip Header from WAVE-File
            for (uint8_t i = 0; i < 44; i++)
            {
                sample = ffread();
            }
            
            // calculate data length
            file_len = ((file_len - 44) / 2);
            
            uint8_t quantization_error;
            int16_t signed_sample_16;
            uint8_t sample_l;
            uint8_t sample_h;
            
            for (uint32_t i = 0; i < file_len; i++)
            {
                // load 16Bit sample-data
                sample_l = ffread();            // load L-Byte 
                sample_h = ffread();            // load H-Byte
                
                // convert to signed 16Bit
                signed_sample_16 = (((int16_t)sample_h)<<8 | sample_l);
                
                // calculate data for noise-shaping
                int32_t sample_16 = (int32_t)(signed_sample_16);
                sample_16 += quantization_error;
                if (sample_16 < -32768){sample_16 = 32768;}
                else if (sample_16 > 32767){sample_16 = 32767;}
                int8_t sample_8 = sample_16 >> 8;
                quantization_error = sample_16 - ((int32_t)(sample_8) << 8);
                
                // convert to unsigned 8Bit
                sample_8 = sample_8 + 128;
                
                // write to 1MByte SRAM
                hugemem_write8(p+i, sample_8);
            }

 

Gruß Rolf

Link to comment
Share on other sites

Hallöchen..

Um die Kosten für einen Bausatz zu senken, will ich mal schaun ob ein anderes LC-Display wzB das SSD1289 von sainsmart am Synth funktioniert. Es handelt sich hierbei um ein 3.2" großes Farb LCD das mit einen Straßenpreis von 7-15 Euro fast überall erhältlich ist.
 

SSD1289
SSD1289.jpg

Das Display hat sogar einen Touch Screen Controller on Board bueb.gif 

Gruß Rolf 

Edited by rolfdegen
Link to comment
Share on other sites

Hallo Seit Anfang diesen Jahres baue ich an meinen eigenen Synthesizer auf Basis eines ATxmega128A1 Mikrocontrollers und analogen Filterbeistein SSM2044. Wenn Ihr Lust und Zeit habt, dann schaut doch mal ins Forum des ComputerClub 2 vorbei. Die Betreiber sind alte Bekannte vom ehemaligen WDR-ComputerClub. Bild 1: AVR-Synthesizer "WAVE 1" [img=https://ox1aha.bay.livefilestore.com/y1pTC6CLuykzy6tk2AXNV9ecTwQKqLRJVup07GJfXJ4QLZaX4gJFkpQJCGN46Q79PIvn-QoQ7QAY1u1NQ8wOjWy0cH9XqjgWZtH/AVR_Synthi_Hardware.jpg] Features in the AVR-Synthi "WAVE 1": 2 Audiochanal 12 Bit 2 Oscillators per chanal 3 LFO's per chanal 1 Filter per chanal Noisegenerator Graphic display with Touch Panal Midi-In Bild 2: WAVE 1 Schema [img=http://www.mikrocontroller.net/attachment/151412/Synthi_Block_01.png] Auf soundcload.com gibts schon einige Klangbeispiele vom "WAVE 1":http://soundcloud.com/rolfdegen/avr-synthi-testsounds-mit-lfo'>Listen on Soundcloud.com Bild 3: So soll er mal aussehen.. der kleine "WAVE 1" [img=https://public.bay.livefilestore.com/y1p0qt9mwU_qoizinB_PzpYKp6RUsLxX2-rjlYzZWHrH-o2Gbui3uZ_hA98IgcOW52DNOMM6V9KvfLxuah9Ik9Fbw/Miditech_01.jpg] Es liegt auf jeden Fall noch viel Entwicklungsarbeit vor mir. Werde von Zeit zu Zeit hier berichten. MfG Rolf
Hi Rolfdegen sorry because i don't speak german, it seems very interesting your project, some month ago i was working and program on Arduino Card for controlling a DAC module to generate several voltages to control analogic symtheziser modules I build for this purpose, like a VCO based on six hex buffer 4069, a VCF steiner type, and a VCA with discrete compontes but ota style (with current mirrors ), I try to see your project and within some days i try to comment it Best Regards!!
Link to comment
Share on other sites

  • 3 weeks later...

Hallöchen

 

Jetzt kommt Farbe ins Spiel  :smile: Das neue Display ist in Betrieb und die ersten Regler Knöpfe sind designed. Zur Zeit passe ich die ganze Text- und Grafikausgabe an das neue Display-Format an. Durch das neue Display ergeben sich auch neue Ideen die ich einmal ausprobieren werde.

 

SainSmart 3.2" LCD 240x320 Pixel

LFO1Menu.jpg

 

Gruß Rolf

Link to comment
Share on other sites

  • 3 weeks later...

Hallo..

Ich bräuchte mal einen Tip. Wie kann ich das Phasen Jitter (siehe Bild 
ca. 3Khz) in meinem Synthesizer verringern. Für die Klangerzeugung 
benutze ich die DDS Synthese. Das Phasen Jitter beträgt in allen 
erzeugten Frequenzen 25usec. Das entspricht genau der Abtastrate im 
Synthesizer.


Phasen Jitter 25usec

Picture%2020.jpgPicture%2021.jpg

 

 

Code Beispiel DDS-Synthese in meinem Synth

//————————————————————————————————————-
// load phase register all 25usec (40KHz Sample Frequence)
//————————————————————————————————————-
LoadPhaccu1:
LDS phakku0, phaccu1+0    ; (R26) load 32Bit Phaseaccu
LDS phakku1, phaccu1+1    ; (R27)
LDS phakku2, phaccu1+2    ; (R28)
LDS phakku3, phaccu1+3    ; (R29)

//————————————————————————————————————-
// Load 256 Byte Sample from 1MB XRAM Addr. 0x0000
//————————————————————————————————————-
Osc1Sample:
MOV R30, phakku3    // set XRAM address (is H-Byte Address from Phaseaccu)
LDI R31, 0x00 
LDI R21, 0x00
LDI R22, 0x80    // load AddressOffset 0x80 (is necessary for addressing the XRAMs in xmega)
ADD R21, R22    // add
OUT 0x3B, R21    // set XRAM Address to EBI Port
LD R1, Z    // load 8Bit Sample from XRAM in R16
OUT 0x3B, R1    // special EBI command

//————————————————————————————————————-
// inc Phaseaccu OSC1 (32Bit)
// ————————————————————————————————————
LDS pha_inc0, phaccu_stepsize1+0    ; load 24 Bit PhaseIncrement
LDS pha_inc1, phaccu_stepsize1+1
LDS pha_inc2, phaccu_stepsize1+2

ADD phakku0, pha_inc0    ; add PhaseIncrement 
ADC phakku1, pha_inc1
ADC phakku2, pha_inc2
LDI R2, 0x00
ADC phakku3, R2

//————————————————————————————————————-
// save Phaseaccu
// ————————————————————————————————————
STS phaccu1+0, phakku0    ; save Phaseaccu
STS phaccu1+1, phakku1
STS phaccu1+2, phakku2
STS phaccu1+3, phakku3

//————————————————————————————————————-
// Other functions for sound calculation (sample is present in r1)
// ————————————————————————————————————
...

 

Hat jemand eine Idee ? Bis dahin lieben Gruß smile.gif

Link to comment
Share on other sites

Hallo zusammen

 

Aus dem Mutable Forum bekam ich den Tip, zwei Samples hintereinander zu laden und dann zu interpolieren. Das sollte die Störungen etwas verringern. Gesagt und getan.. smile.gif 

Das Beispiel Programm funktioniert. Um zwei Bytes für die Interpolation 
hintereinander zu laden kann man gewöhnlich Z+ (ld first_sample, Z+) für 
die Adressierung des nächsten Samples benutzen. Dann würde aber die 
Adresse 0x100 am XRAM (externes 1MByte SRAM) anliegen und nicht 0x001. 
Aus diesem Grund wird die Adresse des Phasenaccu inc und erneut in das 
Adressregister für das XRAM geschrieben.

 

//-------------------------------------------------------------------------
// Load 1.Sample from 1MB XRAM Addr. (sample size is 256 Byte)
//-------------------------------------------------------------------------
sample1 = 16

mov  r30, phakku2        // load Phaseaccu (is same Address vor XRAM)
ldi  r31, 0x00
ldi  r21, 0x00
ldi  r22, 0x80            // load Adress Offset (XRAM)
add  r21, r22            // and add with XRAM Offset Address in R18
out  0x3b, r21            // set XRAM Address to EBI Port
ld     sample1, Z            // load Sample from XRAM
out  0x3B, r1            // special EBI command

//-------------------------------------------------------------------------
// Load 2.Sample from 1MB XRAM Addr.+1
//-------------------------------------------------------------------------
sample2 = 17
inc r30                    // inc Phaseaccu
out  0x3b, r21            // set XRAM Address to EBI Port
ld     sample2, Z            // load Sample from XRAM
out  0x3B, r1            // special EBI command

//-------------------------------------------------------------------------
// Interpolation
//-------------------------------------------------------------------------
mul phakku1, sample2
movw R30, r0
com phakku1
mul phakku1, sample1
add r30, r0 
adc r31, r1
eor r1, r1
mov sample1, r31        // 8Bit Result in sample1

 

Bild 1 zeigt wie die Interpolation Routine in meinem Synthesizer arbeitet. Obere Kurve (Kanal 1) ist die Interpolation aus zwei 8Bit Samples und unten der gleiche Sample ohne Interpolation. Die Messpunkte sind direkt am DAC0+DAC1. Gut zu erkennen ist die feinere Abstufung des Samples mit Interpolation.

Interpolation

68d5e9a6398ad18de28696b7b28ac0.png

 

 

In dem Youtube Video kann man die Interpolation gut erkennen.

Oben Sample mit Interpolation am linken DAC Ausgang und unten der gleiche Sample ohne Interpolation am rechten DAC Ausgang

 

 

Gruß Rolf

Edited by rolfdegen
Link to comment
Share on other sites

  • 2 months later...

Hallöli.. oder so smile.gif 

Ich hoffe euch allen gehts gut. Der Name "DIYWA" für meinen Synthesizer gefällt mir. Die ersten drei Buchstaben "DIY" für Do It Yourself und "WA" für Wave. Klingt auch irgendwie cool biggrin.gif 

Heute habe ich mich etwas mit der Grafik für das TFT Display beschäftigt. Für die Wellenformdarstellung bzw Scope-Funktion wollte ich dicke Linien zeichnen. Die Standart Liniebreite von einem Pixel kann man bei größerer Entfernung nicht mehr genau erkennen. Zuerst hatte ich versucht, zwei Linien mit einer Verschiebung von einem Pixel in X und Y Richtung zu zeichnen. Mit dem Ergebnis war ich aber nicht sonderlich zufrieden. Die beiden Linien liefen an manchen Stellen etwas auseinander (Bild 1). Dann kam mir aber der richtige Gedanke. Ich hatte mal gelesen, das Grafikkarten im PC Dreiecke benutzen um Geometrische Formen oder andere Dinge zu zeichnen. Also habe ich meine Routine fürs Zeichenen einer dicken Linie etwas abgeändert. Statt nur einen Pixel an der X- und Y-Koordinate zu zeichnen habe ich drei Pixel mit einem Verstatz von +1 Pixel an die X- und Y-Koordinate gezeichnet.

Bild 1: Linie mit 2 Pixel
Picture%2030.jpg
1. Pixel auf X und Y
2. Pixel auf X+1 und Y+1


Bild 2: Linie mit drei Pixel
Picture%2031.jpg
1. Pixel auf X und Y
2. Pixel auf X+1 und Y
3. Pixel auf X und Y+1

Gruß Rolf 

Link to comment
Share on other sites

Hallo Leute von Heute smile.gif 

Ich verwende das 3.2' TFT von SainSmart mit SSD1289 in meinem 
Synthesizer Projekt. Die Ansteuerung und Initialisierung sowie Grafik und Textausgabe 
funktionieren mit der Eingebunden Library wunderbar und problemlos. Jetz 
möchte ich aber ein digitalisiertes Audio-Signal als Wellenform in einem 
Gitterraster wie zB auf einem Oszilloskop darstellen. Der 
Display-Controller SSD1289 bietet dafür die Möglichkeit zwei 
Windowsbereiche zu definieren und irgendwie übereinander zu legen 
(Picture in Picture Mode). Das 1.Windows wäre dann mein Raster und das 
2.Windows wäre meine digitalisierte Audio-Wellenform. Leider schaffe ich 
es nicht, beide Windows übereinander zu legen und gleichzeitig 
darzustellen. Hab diverse Register-Settings ausprobiert, aber keine 
funktionierte.

Bild 1: Register-Settings im SSD1289 Controller
PiP.JPG

Aktuell verwende ich einen Windowsbereich im Ram des Displays. Darin 
werden Raster und Wellenform immer wieder neu gezeichnet was viel Zeit 
kostet (siehe Video).

MiniScope im "DIYWA 1"
MiniScope.jpg

Youtube.png
Youtube: 



Im Bild 1 ein Auszug aus dem Manuel des Controllers SSD1289 in Bezug auf 
den Picture in Picture Modus. Vielleicht hat jemand eine Idee.

Vielen Dank für Eure Hilfe. Gruß Rolf 
Link to comment
Share on other sites

Es gibt einen neuen DIY Synthesizer namens "Groovesizer TB2".
The TB2 is a 4 note paraphonic wavetable synth with (digital) filter, envelope and LFO.
In addition to the built-in wave shapes (sine, triangle, saw, square, noise), additional wave shapes can be loaded from SD card.
For sound generation, it makes use of the two 12-bit DACs built into the Due’s ATSAM3X8E processor (output is mono in the current configuration, but stereo operation is also possible).
The TB2 will be available in kit form (ETA December 2014).

Der "Groovesizer"
Groovesizer%20TB2.jpg

Hier ein Video vom "Groovesizer"
Youtube.png
Youtube: 



Gruß Rolf 
Link to comment
Share on other sites

Hallo Freunde..

Mich beschäftigt schon seit längerer Zeit ein Problem mit dem digitalen ADSR Generator in meinem Synthesizer. Wenn ich in meinem monophonen Synthesizer zwei Midi-Noten sehr schnell hintereinander spiele ohne dabei die Release Phase der 1.Note abzuwarten, dann ensteht ein störendes Klick Geräusche zwischen den beiden Noten (siehe roter Kreis Bild 1).

Mein ADSR-Generator funktioniert nach folgenden Regeln. Wenn ich eine Keyboard Taste drücke dann startet der ADSR bei einem Level von Null. Drücke ich während der ADSR-Phasen eine zweite Taste, dann startet der ADSR wieder bei einem Level von Null.

Bild 1: Signalverlauf von zwei Noten die kurz hintereinander angespielt werden
Picture%2036.jpg

Um das zu vermeiden, könnte man den ADSR-Generator retriggern und den neuen Attack-Level auf den auf den letzten Wert des ADSR vor der Retriggerung setzen. Das wird zB. beim ADSR-Modul A-140 von der Firma Doepfer gemacht (siehe Bild 2).

Bild 2: ADSR-Modul A-140
ADSR_Doepfer_d.jpg

Ich werde das mal testen.

LG aus Wuppertal. Rolf 

Link to comment
Share on other sites

Hallöchen..

Ich hab den Code in der ADSR Envelope Routine etwas abgeändert. Jetzt wird der aktuelle ADSR-Wert der 1.Note als neuer Startwert für den ADSR der 2.Note benutzt. Im Bild kann man den Hüllkurvenverlauf der beiden Noten gut erkennen.


Ergebnis der Änderung: Keine Klick Geräusch zwischen zwei Noten
bae5e6d045466d2da0337cbd7f8f90.jpg

Ein Problem gibts aber noch. Wenn der DDS Phasengenerator beim Starten der Samples auf Null zurückgesetzt wird um den Sample ab Anfang abzuspielen, dann gibts wieder Klick Geräusche zwischen zwei Noten. Mal schaun wie ich das lösen kann frown.gif 

Grüße aus Wuppertal. Rolf 

Link to comment
Share on other sites

Hallöchen..
 
Heut gibts mal wieder was auf die Ohren. Hab mal ein paar Demo-Sounds hochgeladen. Sounds sind zweistimmig bzw. zwei Oszillatoren sind gegeneinander verstimmt. 
 
 
Ich wünsch euch viel Spaß beim anhören. Gruß Rolf
Edited by rolfdegen
Link to comment
Share on other sites

  • 1 month later...

Hallo..

Ich bin gerade am überlegen, wie ich eine Wellenform Grafik zB mit einer horizontalen Länge von 402 Pixel auf ein 320 Pixel breites Grafik LCD verkleinern kann, so das es auf das ganzen Breite passt.


Wellenform auf dem LCD
Waveform01.jpg

Lösungsansatz 1: Anzahl Wellenform Pixel / Anzahl LCD Pixel = 1,25

Geht aber nicht ganz auf, da nur jeder 2.Pixel gezeichnet wird confused.gif (siehe Bild)

Lösungsansatz 2: Auf dem LCD bleiben noch 82 Pixel frei. Um diesen Platz auszunutzen teile ich die 402 Pixel / 82 = 4 und zeichne jeden 4.Bildpunkt der Wellenform Grafik zweimal confused.gif

Link to comment
Share on other sites

  • 3 weeks later...

Aus dem mutable-instruments Forum kam mal wieder die rettende Idee. 

PS: Oliver du bist der Größte smile.gif 

Nach seiner Idee konnte ich das Problem dann so lösen:

 

// draw wave-file ————————————————————-

uint32_t source = 0;
uint32_t increment = (uint32_t)(file_lenght << 8)/310;

for (uint16_t i = 4; i < 315; i++)
{
uint8_t sample = hugemem_read8(p + (source >> 8)); // p = xram startadr

sample = sample >>1;
source += increment;
uint16_t x0 = i;
uint8_t y0 = 94; // middle position of screen

if (sample > 64)
{ y0 = 94-(sample – 64); sample = sample – 64;}
else
{y0 = 94; sample = 64 – sample;}

vline(x0, y0, sample, color_orange); // plot sample on screen
}

 

Bild 1: Angepasstes Darstellung

WaveCur01.jpg

 

Gruß Rolf

Edited by rolfdegen
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...