Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolas-van committed Aug 31, 2020
1 parent 4d1121e commit 8958ba4
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 3 deletions.
10 changes: 8 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ Usage

To generate a whole song, you'll first need a song in JSON format generated by Sonant-X Live. An example can be found by clicking [here](http://nicolas-van.github.io/sonant-x-live/#N4Igzg9gdg5gMgUyiAXAZgOwBpzRgEQEMAXQ1AbVAjAGMBGAfQhuNWxGvoYBMFWUADDk6NexAK5QEqIR1qMAHkgBuM4fIbKIAG1R0AnACZ1XAO6FlCAGYQATgFtUaE4aYs2LnnzVyarsZLSKOycrkpQqoKeWroohgJ0nuaWNg5OOFAQAJZgCAxWhLy2PioMJKQ0ANZsABz6OKVg4mCkWcgodIZoACwNEQy2CNoIhLl6aABsk33KDPajxAjFHfqJIFYK%2BVnai8vG65tWgwCOqACsNWj1BwMIkFCEUDRBhme9N7zahACeDMRZ9iCExwGy8X1%2BhHs%2FE6a1BAAdHvkTqhgTcEVAylC9N12NobEwNEcEKcoiA8RB8odkR0cOSkcSUbT8ZDofozkyKclrHZHKS4RREsYhEJBVhBQBdHA0CigdrkOhvLAixXKoVinFKzXCrU65W9PWahVqhXYbXK4FmrXigC%2BWFlApVYsdRsNGst7p1Cv1Tu9LuVps9Z3qHoENptdt8jGY%2FBCGjEPhEXgkUgTGnCkVkiZiqFe7MjDC5qV5%2B1Cbn4NU88dJpYCKY6Fd8YRUemiOj0qySFm5aTiGWyuXyhSWJX65UIVSc%2Bn07EazVa7TOUymM1uw1GQToAi3W5X8xaw7iZzzoKs212OZBVIZ6CMl9u90ezxzR7vnx%2BfwBQQboLfEKxKAma54URIkSWPTZ0UxfgJlxfFE1Anw6RPak1iQ6l3jpFlzlgzkuyLdIQH5FB5SwYxRXI0jJRAaViPtYi6DQENdWYpjWJY9jhXDOj5S6Di%2BLYgT%2BKta0uPzaNUAbRMq0zOM%2BECVMuHTBTGGzasNELHkFNccSUEk2h%2FG8NS%2FCTeSjKbCItM0NszILPDNNJTIcjyAoihRWRSjHCcUDOdz%2BiaFpCDaVBugMFdBjXMYUG6CYBBnfo93PDpGLvU8dgPWErxJTc0DQfZQUGB8ng3eJXyGd9%2FkBYLSvBKC9FRYCMQQ7y70grCOgEBs6Xg6lZCQzLEPxJq80w%2F86BqHDbJSezZCI8gPUSOgqJoygQDlbU6DdT0NQ2gMRU2vaAx2rbdtdbAjvW%2Fb1UOnEw1tKgNB02MuGkkxRDkusZMU5saXzVTc1eybu15T7tPcYJK0MkGTI%2BzwlJ%2B0s%2FpfRtAfwhz%2B2codll82ZPOqbzsYYfz5z0HywqGEZIu6GodxAUoEoPeJZBPM8GZS6kYqZzYCugR8XkVD4yt%2BCqgk5sF3za0XIKayXEQljkCS4aX5eQ69esGnr5blsl8Q0nsZoFMVDYWsUlplVaBUupjzqE622NtjjbojRNHoBl781rEWAbhz6VOs%2F78114tPBd5G3Zrd6gmuUtvdbWIvU7Kae32RyBxcg8CdxnMQobWcAqC9qMDzUpwopjcBAmDbdwWBnulF1LEucG4msMfQJjyrm7h5orn3AsWhc%2FRkBZqtq6DodgGvpElG4ntqMEbrrCQ17WKRVrLlepYbmVGwwMJ1uy9ZwWb5tIw3DFN2jzfo51r%2BNS2bev30zmNM4TvNB27sv%2BUH8NJ%2FTqEy144HR%2Fs%2FV%2BTpgwsUdvdLgIcpKQ1dhHZSDAY6%2FWsgYEs6l968jWKWHSqJw78Chh7VAUd9JIO%2BlDVSaCE5AxbKtdGg5XKkg8sQCoeMGJxVmETQK7RGYExLuuYKFc1h02rssKhTcWZiLZtefQNR273i7k%2BXSQFNi%2Fg%2FJVAC1Vxb%2FleC1EC7M9EYlnhNbqqtlb9R%2Bmha888t7QWuHSQOPhZoUWcIkNA58VpygYutZKe1jTJW8a6Mivj1T%2BJ8eEoJhoAkhI2sEi6YSlSiS8bxEUKSxRoHZKk1xaSGLsk6M4EUGTDQ5JKQU9JmSxS8XyVEvJOSilZMSR%2FLx9Tyl%2F0KXklpR1cltNae0mpPTundKAUMq6%2FTQwiQ%2Fs7MGT03oEPgcmT2%2BZkFZj9kjRMjj0DBzBnpYyYdSFEJsss0hiM8ylg2bIFOGNGGdA4WUFh448aGH2LnYmukc79H4ZFK404q77j2EjZmaVljTwsbXGCd5uYPG7nEHoWj%2B4aPeD%2BQWtV0AgoYFLak8jWr%2FhqLvCkpiSRqxXhY1C6trGax0Z1PeidgaHwoOtE%2BLiPHcXiT%2Fb0rKAGOnmt0Z%2B7LImcr5eMiMa0Blcp6etMVADNqANGQK5igCkn0tFYK2VgYVUXUOpK1VrFIFiW2fMxBByfZkIskZX2sRjXnK2eWCGczQ4IMOeQ2OlkrV0KcgwhmSNmGsOxAIHotyuH5yMHQVExdyYCKSj0MevzErxG%2FIcSRF4m6Yp8qLSFvM6pwvUS8LNI8X6GMnhJAtbV4gmMXmY5elJC2WLJSSfYI1%2BBnFJbhGlTilUiiNp2xaUozZeLvoJAd%2F9%2BK3SorYCAphEALibY3JA3AAAK5QljtH0NaIAAA%3D) and choosing "Export JSON" in the menu on the left.

With that JSON song, we will be able to use the `generateMusic` function:
With that JSON song, we will be able to use the `generateMusic()` function:

```javascript
import * as sonantx from 'sonantx'
Expand All @@ -46,6 +46,9 @@ sonantx.generateMusic(mySong, audioCtx.sampleRate).then((audioBuffer) => {
})
```

The `generateMusic()` can take multiple seconds, depending on the length of your song. It is recommended to initialize your
music at the startup of the application and keep a reference to the audio buffer.

### Single sounds generation

To generate single sound (suitable for video games sound effects) you'll first need an instrument description in JSON format generated by Sonant-X Live. To get an example one, you can click [here](http://nicolas-van.github.io/sonant-x-live/#N4Igzg9gdg5gMgUyiAXAZgOwBpzRgEQEMAXQ1AbVAjAGMBGAfQhuNWxGvoYBMFWUADDk6NexAK5QEqIR1qMAHkgBuM4fIbKIAG1R0AnACZ1XAO6FlCAGYQATgFtUaE4aYs2LnnzVyarsZLSKOycrkpQqoKeWroohgJ0nuaWNg5OOFAQAJZgCAxWhLy2PioMJKQ0ANZsABz6OKVg4mCkWcgodIZoACwNEQy2CNoIhLl6aABsk33KDPajxAjFHfqJIFYK%2BVnai8vG65tWgwCOqACsNWj1BwMIkFCEUDRBhme9N7zahACeDMRZ9iCExwGy8X1%2BhHs%2FE6a1BAAdHvkTqhgTcEVAylC9N12NobEwNEcEKcoiA8RB8odkR0cOSkcSUbT8ZDofozkyKclrHZHKS4RREsYhEJBVhBQBdHA0CigdrkOhvLAixXKoVinFKzXCrU65W9PWahVqhXYbXK4FmrXigC%2BWFlApVYsdRsNGst7p1Cv1Tu9LuVps9Z3qHoENptdt8jGY%2FBCGjEPhEXgkUgTGnCkVkiZiqFe7MjDC5qV5%2B1Cbn4NU88dJpYCKY6Fd8YRUemiOj0qySFm5aTiGWyuXyhSWJX65UIVSc%2Bn07EazVa7TOUymM1uw1GQToAi3W5X8xaw7iZzzoKs212OZBVIZ6CMl9u90ezxzR7vnx%2BfwBQQboLfEKxKAma54URIkSWPTZ0UxfgJlxfFE1Anw6RPak1iQ6l3jpFlzlgzkuyLdIQH5FB5SwYxRXI0jJRAaViPtYi6DQENdWYpjWJY9jhXDOj5S6Di%2BLYgT%2BKta0uPzaNUAbRMq0zOM%2BECVMuHTBTGGzasNELHkFNccSUEk2h%2FG8NS%2FCTeSjKbCItM0NszILPDNNJTIcjyAoihRWRSjHCcUDOdz%2BiaFpCDaVBugMFdBjXMYUG6CYBBnfo93PDpGLvU8dgPWErxJTc0DQfZQUGB8ng3eJXyGd9%2FkBYLSvBKC9FRYCMQQ7y70grCOgEBs6Xg6lZCQzLEPxJq80w%2F86BqHDbJSezZCI8gPUSOgqJoygQDlbU6DdT0NQ2gMRU2vaAx2rbdtdbAjvW%2Fb1UOnEw1tKgNB02MuGkkxRDkusZMU5saXzVTc1eybu15T7tPcYJK0MkGTI%2BzwlJ%2B0s%2FpfRtAfwhz%2B2codll82ZPOqbzsYYfz5z0HywqGEZIu6GodxAUoEoPeJZBPM8GZS6kYqZzYCugR8XkVD4yt%2BCqgk5sF3za0XIKayXEQljkCS4aX5eQ69esGnr5blsl8Q0nsZoFMVDYWsUlplVaBUupjzqE622NtjjbojRNHoBl781rEWAbhz6VOs%2F78114tPBd5G3Zrd6gmuUtvdbWIvU7Kae32RyBxcg8CdxnMQobWcAqC9qMDzUpwopjcBAmDbdwWBnulF1LEucG4msMfQJjyrm7h5orn3AsWhc%2FRkBZqtq6DodgGvpElG4ntqMEbrrCQ17WKRVrLlepYbmVGwwMJ1uy9ZwWb5tIw3DFN2jzfo51r%2BNS2bev30zmNM4TvNB27sv%2BUH8NJ%2FTqEy144HR%2Fs%2FV%2BTpgwsUdvdLgIcpKQ1dhHZSDAY6%2FWsgYEs6l968jWKWHSqJw78Chh7VAUd9JIO%2BlDVSaCE5AxbKtdGg5XKkg8sQCoeMGJxVmETQK7RGYExLuuYKFc1h02rssKhTcWZiLZtefQNR273i7k%2BXSQFNi%2Fg%2FJVAC1Vxb%2FleC1EC7M9EYlnhNbqqtlb9R%2Bmha888t7QWuHSQOPhZoUWcIkNA58VpygYutZKe1jTJW8a6Mivj1T%2BJ8eEoJhoAkhI2sEi6YSlSiS8bxEUKSxRoHZKk1xaSGLsk6M4EUGTDQ5JKQU9JmSxS8XyVEvJOSilZMSR%2FLx9Tyl%2F0KXklpR1cltNae0mpPTundKAUMq6%2FTQwiQ%2Fs7MGT03oEPgcmT2%2BZkFZj9kjRMjj0DBzBnpYyYdSFEJsss0hiM8ylg2bIFOGNGGdA4WUFh448aGH2LnYmukc79H4ZFK404q77j2EjZmaVljTwsbXGCd5uYPG7nEHoWj%2B4aPeD%2BQWtV0AgoYFLak8jWr%2FhqLvCkpiSRqxXhY1C6trGax0Z1PeidgaHwoOtE%2BLiPHcXiT%2Fb0rKAGOnmt0Z%2B7LImcr5eMiMa0Blcp6etMVADNqANGQK5igCkn0tFYK2VgYVUXUOpK1VrFIFiW2fMxBByfZkIskZX2sRjXnK2eWCGczQ4IMOeQ2OlkrV0KcgwhmSNmGsOxAIHotyuH5yMHQVExdyYCKSj0MevzErxG%2FIcSRF4m6Yp8qLSFvM6pwvUS8LNI8X6GMnhJAtbV4gmMXmY5elJC2WLJSSfYI1%2BBnFJbhGlTilUiiNp2xaUozZeLvoJAd%2F9%2BK3SorYCAphEALibY3JA3AAAK5QljtH0NaIAAA%3D) then choose one of the tracks of the sample song and click on the
Expand All @@ -63,10 +66,13 @@ const audioCtx = new AudioContext()
const midiNote = 67
const bpm = 120

sonantx.generateMusic(myInstrument, midiNote, audioCtx.sampleRate, bpm).then((audioBuffer) => {
sonantx.generateSound(myInstrument, midiNote, audioCtx.sampleRate, bpm).then((audioBuffer) => {
const audioBufferSource = audioCtx.createBufferSource()
audioBufferSource.buffer = audioBuffer
audioBufferSource.connect(audioCtx.destination)
audioBufferSource.start()
})
```

Single sound generation can be very fast but sounds can still be generated ahead of time if precise timing is very
important for you.
2 changes: 1 addition & 1 deletion sonantx.js
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ export class TrackGenerator {
nullGain.gain.value = 0
source.connect(nullGain)

const scriptNode = this.audioCtx.createScriptProcessor(4096, 2, 2)
const scriptNode = this.audioCtx.createScriptProcessor(512, 2, 2)
nullGain.connect(scriptNode)
let currentSample = 0
let nextNote = 0
Expand Down

0 comments on commit 8958ba4

Please sign in to comment.