This answer here postulates that to actually generate a square wave (or any other abstract wave-shape) you have to layer multiple sine waves on top of each other. Yet old hardware (Commodore, NES, etc) lacked sine wave channels and instead relied heavily on square pulse-waves, triangle waves, noise and sawtooth waves. I always assumed this was done because those waves are easier to generate than a simple sine wave. So,would genereating these wave shapes not be computationally more expensive? Why was it done anyway?
Why were square waves used in old hardware instead of sine waves?
651 Views Asked by uncanny At
2
There are 2 best solutions below
2
Phil Freihofner
On
My recollection was that a member of our team figured out we could generate sounds by turning something on and off quickly. This was the early 1980's and unfortunately I don't remember the specifics. But I think a key point is that we were flipping a switch, not computing the data for those waves. The waves that resulted were the results of a "pulsed" action. This may account for some of the early sounds but I think its also speculative. I wasn't the one directly involved, and theoretically, this at best only explains square and pulse waves, not triangle or sawtooth waves. Will be interested in what others come up with.
Related Questions in AUDIO
- how to play a sounds in c# forms?
- Winsound not working isn't working at all
- Ringing noise overpowering voice / Recording audio with Max 9814 microphone on Raspberry pi pico using ADC Pin / Circuitpython
- How to take first x seconds of Audio from a wav file read from AWS S3 as binary stream using Python?
- gluon attach audio doesn't play any sound on android
- Implementing trim and fade filters with ffmpeg - MP3
- Unable to set device connection state as INPUT device type is none
- Is there a way to differentiate music and talking from a video?
- How to concatenate audio tracks and make them start a certain moment using Python?
- Combine two audio in different languages to one natural sounding
- STM32 - Serial Audio Interface (SAI) - dual data line transmit possible?
- playing mp3 downloaded via curllib gets cut short
- How to stream PCM audio to a speakers both on mac and linux in Node.js?
- Scikit-Maad -From the function rois.find_rois_cwt, I want to get a csv of the outputs so I can do my own analysis on it
- Using MediaPlayer slows down SoundPool sound effect
Related Questions in SPEAKER
- How to turn on the main speaker of the phone and the speaker of the phone at the same time?
- How to record the speaker audios from youtube , google meeting or zoom meeting etc in reactjs recording application?
- The Speaker icon is removed, while switching the route from Bluetooth or Microphone to Speaker from the call kit screen
- Are there any matter examples for speaker devices?
- How to change ear speaker to loud in Angular
- How to force a known PIN code based Pairing using SSP?
- How to play base64 audio string through speakers in nodeJs
- Speaker outputs bursts of static when running Node.js WebSocket server with “audio/x-mulaw” data from Twilio
- wav2vec2 - speaker embedding
- How to play sounds through speaker connected to ATMega328PB board (in C)
- Is it possible to stream system sounds (speaker output) and recognize text from it in python?
- Play a audio file trough a specific speaker channel using gst-launch-1.0
- I want to listen to a pdf file as audio and my question is to run time.sleep() for 10 seconds and countdown through the speaker
- how to listen to audio starting from the feature extractions of the deep learning model?
- how to control the Sound Through Speaker And Earphone in flutter
Related Questions in COMMODORE
- Why is there an unexpected character on line 6 in C64 Basic?
- How to setup TomHarte CPU tests
- Interfacing with the Commodore 64 Serial Port using Assembly
- 6510 Interrupt Handler for the 6502 Klaus Dormman Interrupt test
- 6502 Assembly Loops
- 6502 Loops and Macros with Kick Assembler
- Using xa65 to create a Commodore 64 .prg file and disk image
- I'm currently trying to learn commodore 64 BASIC and I'm getting an error with my sleep function
- DEF FN(x) How does one transfer / translate "Define Function" command to VB.NET?
- How to send and receive messages between a modern computer and a Commodore 64 via WiFi?
- How to enter commands programmatically in c64's basic?
- How do you relocate the Zero Page on a 65816
- Commodore C64 how to detect PAL or NTSC
- How to 'manipulate' strings in BASIC V2?
- C64 Assembly - Cycling through Bitmaps as a graphical introduction to my game
Related Questions in NES
- Is there a way to change the register of Super Mario Bros (NES) level 1 world 1 to start in a specific position?
- How to make smooth horizontal / vertical movement in 6502 assembly (NES)?
- Unable to see SuperMarioBros env being rendered on the screen
- How should we use mirrored memory on a NES 6502?
- Why this NES 6502 assembly code doesn´t work when moved to a scoped proc?
- How to convert a .yyp file to .s in ASM 6502
- Swift SpriteKit/Quartz/Metal: How to draw low-level pixel data at 60FPS?
- Smooth sprite movement
- What can I do when ld65 prompts a memory and configuration error? It just closes
- Is there a way to create an array of combined functions compile-time in c++?
- CA65 NES issue with INY STY
- Fetch data from a middle of a big stack using searchAfter(jump to a specific page,)
- Why were square waves used in old hardware instead of sine waves?
- How to save Gamestate Objects in python?
- What's an elegant way to read controller input for NES (6502) assembly on ca65?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Not really, it just describes how a square wave can be analyzed to prove certain facts about its sound - how much energy is in each frequency band and such. This is somewhat similar to how every integer can be factored into one or more smaller prime factors (15=3×5) which is useful when analyzing algorithms but still doesn't change how we came up with the original number (maybe counting 15 sheep).
Separating a "complex" wave into sinusoidal components are very useful mathematically, but does not tell us the mechanism behind its original creation.
Your assumption here is correct. Starting with a digital circuit, the square wave is the easiest and cheapest waveform to create1. Just turn a voltage on and off using a single transistor. It is also cheaper in a mass-market manufacturing context because a sine wave generator (and even a saw-tooth) made from analog electronics will require a lot of extra components in order to not drift with temperature, age, and humidity.
It is also arguably more useful in a synthesizer context than one single sine wave because it has a lot of harmonics you can modify with a filter like in the SID.
The next step on the complexity ladder is any ramp-shape, like the triangle or saw-tooth. While you can make these using analog electronics, even back in the early eighties they were typically implemented by a simple DAC driven by a digital counter. The rate of the counter determined how fast the waveform goes from 0 to MAX and thus determined the pitch.
Once you have your DAC in your computer you could use it to generate a sine wave but it requires either impossibly expensive real-time calculations or a large table of pre-calculated sine values, so it was rarely (never?) done. When computers got some useful amount of RAM and bandwidth, they quickly switched to plain arbitrary samples and never looked back.
1) In fact, anything else is so much more complicated that today we just do everything using simple digital pulses and just filter the result in various ways (PDM, PWM, Delta-sigma)