ShootersForever.com Forum Index

GoldenEye 007 Nintendo 64 Community, GoldenEye X, Nintendo 64 Games Discussion
GoldenEye Cheats, GoldenEye X Codes, Tips, Help, Nintendo 64 Gaming Community


CD-Quality GoldenEye 007 Music Revisted
Goto page Previous  1, 2, 3, 4, 5, 6, 7  Next
 
Post new topic   Reply to topic    ShootersForever.com Forum Index -> GoldenEye 007
View previous topic :: View next topic  
NutShot
Agent
Agent


Joined: 19 Nov 2017
Posts: 55

 PostPosted: Sat Jun 22, 2019 1:08 pm    Post subject: Reply with quote Back to top

Yeah, yeah, yeah!
Thank you, thank you, thank you!!!!! Very Happy

Edit:
I don´t wanted to say this, but could it be that Jet Force Gemini is missing something?
https://www.youtube.com/watch?v=6dkEGjfI1fw

You may have that said already, but if you don´t mind if i ask again. Are these rips now also based on a USF?
 
View user's profile Send private message
radorn
007
007


Joined: 23 Sep 2007
Posts: 1424

 PostPosted: Sun Jun 23, 2019 1:38 pm    Post subject: Reply with quote Back to top

@L.Spiro Thanks for the updates!


NutShot wrote:
You may have that said already, but if you don´t mind if i ask again. Are these rips now also based on a USF?


Not USF. If I understand this right, and I think I do, they are ripped from the ROM as MIDI sequences and the SoundBank/SoundFont (instrument samples), and rendered with professional tools, with adjustments to make up for the differences between the way the original game's engine renders them on the N64 and how more standard/professional MIDI environments work.
It's all pretty technical.

N64 games usually render audio at low samplerates (there are games that drop below 20kHz sampling rates) and, I presume, not the most precise filters for resampling and so on.

USF sets are basically N64 ROMs that have been hacked to only play music and stripped down of any data not related to that task. Then, they are fed to an USF player, which is really a stripped down N64 emulator also reduced to just playing music. But N64 audio is rendered in software, so what the USF playback gives out is, asuming accurate emulation, the same as you'd get on a real N64.

L.Spiro's work here is taking original MIDI sequences from the games and rendering them in a high quality MIDI playback environment instead.

So, in short, not USF.

I've heard of other efforts that also try to replace the instrument samples for higher quality ones. That's certainly interesting too, but the music will sound different in that case. Whether these sound better or worse will depend on each listener's taste.

If I have understood right, and I think I do, this here is an attempt to provide higher fidelity renderings that are faithful to the originals, without changing the way the music sounds.
 
View user's profile Send private message
L. Spiro
Agent
Agent


Joined: 27 Feb 2009
Posts: 116
Location: Cupertino, CA

 PostPosted: Wed Jun 26, 2019 8:05 pm    Post subject: Reply with quote Back to top

There are no missing songs from Jet Force Gemini.
The song you posted is here: https://www.youtube.com/watch?v=PqZ4b-iuq4s&list=PLWsnao9n727MrYWpnGjknS1vpcMCr3Uc8&index=29

I have just added Killer Instinct Gold again, this time extremely faithful to the original sound, as yes, indeed, that is my goal.

I have to redo all of the Rare songs except Jet Force Gemini and Killer Instinct Gold to gain a bit more accuracy.
I confirm that no USF files are used (nor are SoundFonts).


L. Spiro
 
View user's profile Send private message
L. Spiro
Agent
Agent


Joined: 27 Feb 2009
Posts: 116
Location: Cupertino, CA

 PostPosted: Sun Aug 04, 2019 1:31 pm    Post subject: Reply with quote Back to top

After speaking with the composers and the guy at Rare who did their MIDI implementation, as well as updating my synthesizer to a new firmware that has fixed a bug I reported to Yamaha, this Perfect Dark restoration represents the pinnacle of my work. It is completely accurate in terms of panning, balance, etc., and will scratch the itches of all people who are looking for the ultimate in a faithful crisp clear clean restoration.

https://www.dropbox.com/s/tol8ri2bba3v063/Perfect%20Dark.rar?dl=0


GoldenEye 007 is already being recorded using all the same settings and accuracy.
YouTube videos will be available within the week, at which point I will bump again.


L. Spiro
 
View user's profile Send private message
NutShot
Agent
Agent


Joined: 19 Nov 2017
Posts: 55

 PostPosted: Mon Aug 05, 2019 8:34 am    Post subject: Reply with quote Back to top

Thank you for your hard work as always.
I almost checking this thread every day to see if there is an update or anything. Very Happy
So you redid GoldenEye already with the new fixes as far as i understand?
 
View user's profile Send private message
L. Spiro
Agent
Agent


Joined: 27 Feb 2009
Posts: 116
Location: Cupertino, CA

 PostPosted: Mon Aug 05, 2019 11:32 am    Post subject: Reply with quote Back to top

The GoldenEye 007 set is being recorded now, but there are some issues.
#1: I can't use the actual same settings as I did for Perfect Dark. But they should still be considered a set. The reason for the differences is because things changed in Rare's in-house engine, and if I don't adjust my settings accordingly the results are wildly different and can't be considered a matching set.

#2: There are inconsistencies between things I am being told and what I hear. I am investigating this issue.

The good news is that I am not investigating this alone. I am discussing these issues with the people at Rare who made them, and although they are just going by 20-year-old memory it helps a lot.


Yesterday I learned the anecdotal story behind why only Rare uses this non-standard MIDI curve. The composers said that something about the sound was just off, so Chris Stamper charged someone with investigating it, and he found the issue to be in the MIDI volume curves.
But why? It would have had a standard MIDI curve before that, so why would it sound strange?

I found evidence that way back then Roland was using (log10(X)*20), and most of the composers were using Roland back then. One of them told me he did not specifically think about Roland curves when saying the MIDI was off somehow, but my guess is that they were all just accustomed to hearing it through their Roland synths and so when the game played their songs back using the standard MIDI curve it sounded off (fade-outs would have been too abrupt as an example).

Koji Kondo studied at a Yamaha music school and used primarily Yamaha synths to sample music for his games, and Yamaha has, since the start, adhered to the MIDI standard, and MIDI engines from Nintendo all use the standard MIDI curve. Not likely a coincidence.


But any points about why the composers thought it sounded off are speculation on my part. It is just my suspicion that they subconsciously were used to the Roland volume curves.




Anyway, with all that being said, the point is I am having some issues with GoldenEye 007, but I am also talking to the people who would know what is happening here, so there may be delays but in the end everything should sound super solid.



I might move on to Banjo-Kazooie while I investigate these issues, but I will do more studies before going that route.


L. Spiro
 
View user's profile Send private message
L. Spiro
Agent
Agent


Joined: 27 Feb 2009
Posts: 116
Location: Cupertino, CA

 PostPosted: Sun Aug 25, 2019 6:56 pm    Post subject: Reply with quote Back to top

GoldenEye 007: https://www.youtube.com/playlist?list=PLWsnao9n727PT17V5AzCkZYEQqeuVm01E
WAV pack: https://www.dropbox.com/s/kahlllo8ddyh6c7/GoldenEye%20007.rar?dl=0

Perfect Dark YouTube playlist: https://www.youtube.com/playlist?list=PLWsnao9n727OrLod3kmWZWrj6tl7IQiO-


L. Spiro
 
View user's profile Send private message
NutShot
Agent
Agent


Joined: 19 Nov 2017
Posts: 55

 PostPosted: Mon Aug 26, 2019 8:23 am    Post subject: Reply with quote Back to top

Thank you, Spyro!
2 GB full of good music. I´m excited. So this is your definitive Goldeneye as you had in mind in the first place?
Can´t wait to hear it. Very Happy
Also, is the Download link on the updated Perfect Dark Playlist the same one as you posted before?
 
View user's profile Send private message
L. Spiro
Agent
Agent


Joined: 27 Feb 2009
Posts: 116
Location: Cupertino, CA

 PostPosted: Mon Aug 26, 2019 11:28 am    Post subject: Reply with quote Back to top

Yes to all.

I believe this is the final GoldenEye 007 set.
I had long and detailed technical talks with the developers to understand why I was hearing unusual differences.
If you play the MIDI yourselves, you will find that in Surface I, there are background wooden klonk and metal klang noises alternating. In the game, they sound very distant and quiet, panned slightly left.
In the MIDI file you will find they are panned full left and have 126 reverb. The panning sounds more left than in the game, so what is the deal? Note that on the 2nd loop, the super-low bass does the same thing (full left pan + 126 reverb).

The reverb properties were important to replicate here. It turns out that it can impact the panning quite a lot. Rare implemented a custom reverb which not-only sounded nicer than the default but used fewer CPU cycles, and it also diffuses towards center, so more reverb = a more centered sound. This brings the full-left sounds in Surface I more towards the center.

So I made a reverb environment with this important property and as you can tell it sounds much more accurate.
If anyone finds a major flaw in one of the songs I will redo it, or if someone at Rare gives me the literal reverb implementation they used and it does not cause noise artifacts, then I may redo the entire set (and in that case I would likely redo every Rare song I have).

But as it is now, it is extremely accurate/faithful, and I see no reason I will ever need to record it again.


The Perfect Dark and GoldenEye 007 WAV packs and playlist links are all the same as before. They have simply been updated.



L. Spiro
 
View user's profile Send private message
Jedi QuestMaster
Agent
Agent


Joined: 02 Apr 2007
Posts: 118
Location: In a college dorm far, far away

 PostPosted: Sat Oct 19, 2019 8:04 pm    Post subject: Reply with quote Back to top

Thank you for this, L. Spiro. Very Happy Now if only we had high quality artwork to go with it. Confused
_________________
And I'll leave it at that!
 
View user's profile Send private message AIM Address
NutShot
Agent
Agent


Joined: 19 Nov 2017
Posts: 55

 PostPosted: Thu Nov 07, 2019 1:14 pm    Post subject: Reply with quote Back to top

Hello, Spyro.
How´s it going?
I just want to let you know that something isn´t right on your Killer Instinct Gold Soundtrack. The Track "Character Select" get´s to Mono after 11 Seconds. You can hear it also on the Youtube Track you uploaded:
https://www.youtube.com/watch?v=H4RKMhdT_jw
 
View user's profile Send private message
L. Spiro
Agent
Agent


Joined: 27 Feb 2009
Posts: 116
Location: Cupertino, CA

 PostPosted: Fri Nov 08, 2019 2:38 am    Post subject: Reply with quote Back to top

That is correct. The song does that for some reason.

All songs on the site (except maybe a few) will now be redone.
I have solved the technical aspects of the Nintendo 64 MIDI implementation and all recordings there except the Pilotwings 64 ones are missing just 1 more detail to make them truly “correct” (but some of them have no reverb so are already correct).

The current Pilotwings 64 upload (I already have new recordings yet to be uploaded) has this feature but is too wet (I have been tuning my reverb to match theirs), so it also has to be redone.




I will do a knowledge-drop here for the sake of anyone who wants to work on these MIDI files.

Nintendo 64 panning formula is:
Code:
PAN = clamp( PAN - 1, 0, 126 ) / 126;  // Pan from 0..127 -> 0..1.
L = cos( PAN * HALFPI ); // Left attenuation (decrease in volume).
R = cos( (1 - PAN) * HALFPI );

This is pretty standard. Your PC, synthesizer, and virtually any MIDI device you use to play back MIDI will use this same formula.
At center (pan = 64), the L and R volume levels will be 0.7071.



Nintendo 64 volume (MIDI cc7) formula is:
Code:
VOL = log10( VOL / 127 ) * 40; // L and R are then multiplied by this.



Graham Smith went into the Rare MIDI implementation and modified this as follows:
Code:
VOL = log10( VOL / 127 ) * 20; // L and R are then multiplied by this.


The “* 40” version is the standard MIDI implementation your PC, synthesizer, and everything else will use.
If you want to play back Rare MIDI files though you have to make a script to change the volume levels.
All Rare games use the “* 20” version. To my knowledge they are the only game company to deviate from the standard and modify their MIDI implementation.
To convert from “* 40” to “* 20”, use:
Code:
VOL = log10( VOL / 127 ) * 20; // This is the dB that the MIDI file wants.  If the MIDI file contains volume = 64, that is -5.952.
// Now just convert that to the standard MIDI formula:
VOL = round( pow( 10, VOL / 40 ) * 127 );


So if a Rare MIDI file volume (cc7) is 64, the final result you want would be 90.
Be sure to keep cc11 “Expression” at 127.


Nintendo 64 reverb:
The balance between wet and dry is:
Code:
DRY = cos( (REVERB / 127) * HALFPI );
WET = cos( (1 - (REVERB / 127)) * HALFPI );


I use a sys-ex in my MIDI file to adjust the DRY and modify the REVERB in-place to get the WET.
This is vital. If you do not do this step, you will have severe balance issues with high reverb.


Finally, the reverb itself is just a delay-type reverb. I will not get too technical with this.
It is a mono delay reverb that produces samples without delay (as soon as a sound plays, some reverb is also generated; there is no delay), but it takes roughly 92 milliseconds for the sound to come out clearly in the reverb. So very quiet samples are generated as soon as a sample plays and then the full echo sound comes in about 92 milliseconds later.
Reverb lasts roughly 3.2 seconds.

Because it is a mono reverb and sounds similar to the actual sound generating it, it drags the sound towards center.
This is why most Nintendo 64 songs sound so narrow.

Shawn Pile, while at Rare, changed the MIDI reverb itself, so Banjo-Tooie, Perfect Dark, and their later games sound much better (also a more efficient reverb!). They have an actual stereo reverb.


My final upload of the GoldenEye 007 and Perfect Dark OST’s will correctly handle all of this except that I will be using a high-quality approximate reverb. It has the important “delay reverb” properties needed to match the in-game sound, but is a high-quality stereo reverb.
Because my reverb is not exactly the same, I also approximate the perceived pan.
I mention above that the mono reverb drags sounds towards center, so I have to account for this if I am using a stereo reverb.


Code:
   // Gets the perceived pan based on a mono WET that has an average volume that is some percentage of the DRY.
   uint8_t CMidiLoader::GetPerceivedPan( uint8_t _ui8ActualPan, uint8_t _ui8Reverb, double _dVolume ) {
      int32_t iSign = 1;
      double dRealFrac = (clamp( _ui8ActualPan, 1, 127 ) - 1.0) / 126.0;
      double dFrac = dRealFrac;
      if ( dFrac > 0.5 ) {
         dFrac = 1.0 - dFrac;
         iSign = -1;
      }
      double dL = std::cos( dFrac * HALFPI );
      double dR = std::cos( (1.0 - dFrac) * HALFPI );
      double dReverb = std::cos( (1.0 - (_ui8Reverb / 127.0)) * HALFPI ) * _dVolume;
      double dDry = std::cos( ((_ui8Reverb / 127.0)) * HALFPI );
      double dFinalL = dL * dDry + dReverb;
      double dFinalR = dR * dDry + dReverb;
      double dFactor = dFinalL / dFinalR;
      int32_t i32FinalPan = 0x40;
      double dWinner = 8827696947673172000.0;
      for ( int K = 1; K <= 0x40; ++K ) {
         double dPanFactor = (K - 1) / 126.0;
         dL = std::cos( dPanFactor * HALFPI );
         dR = std::cos( (1.0 - dPanFactor) * HALFPI );
         double dThisFactor = std::abs( dL / dR - dFactor );
         if ( dThisFactor < dWinner ) {
            dWinner = dThisFactor;
            i32FinalPan = K;
         }
      }
      uint8_t uiFinal = iSign == -1 ? (127 - i32FinalPan + 1) : i32FinalPan;
      return uiFinal;
   }
** IMPORTANT** I had to change the spaces to character 160 in order to post here. If you copy this code it will not compile and you will be confused as to why. Change all characters 0160 back to spaces.

_dVolume is the level of reverb compared to the dry. If a dry sound generates a wet reverb at 70% of the dry volume, then _dVolume would be 0.7. If it is 1.0 then it means the delay reverb is generating a sound that is the same volume as the dry sound.

It accurately adjusts the panning towards center as reverb increases.



If you want to play back Rare MIDI files correctly, you can just make a script that modifies the cc7 values in-place to account for the “log10( X ) * 20” change. Dump that to a temporary file and play that instead.

If you want to play any Nintendo 64 MIDI file, you also have to adjust the DRY levels.
If you are unable to do this, you can approximate it with the cc11 Expression control. Use the above formulas to calculate the WET and DRY levels, apply a factor to the WET level (IE, assume reverb is ~70% the volume of the main sound), add them together and you get an approximate volume level which you can use cc11 (Expression) to approximate.
That means if reverb is 64 at 70%, you will end up with a total perceived volume of 1.2×. At REVERB=120, the final volume would be 0.7838×. Convert to Expression. Use this pseudocode as a template:
Code:
X = REVERB / 127.0;
Y = cos( X * _HalfPi ) + (cos( (1 - X) * _HalfPi ) * 0.7);
Y = Y * 0.8;
Decib = log10( Y ) * 20;
Exp = pow( 10, Decib / 40 ) * 127;




If your goal is to play back a GoldenEye 007 or Perfect Dark MIDI file, apply the log10() change to the cc7 values in-place.
Then use cc11 to adjust the volume levels based on how loud it may be perceived with the reverb added.
Then use the C++ code above to adjust the pan in-place more towards center as reverb increases.
You modify the cc7 values in-place, insert cc11 values, and modify cc10 pan in-place, dump that to a temporary file, and play that instead.

You will basically get a decent sound from the MIDI files this way.


L. Spiro
 
View user's profile Send private message
L. Spiro
Agent
Agent


Joined: 27 Feb 2009
Posts: 116
Location: Cupertino, CA

 PostPosted: Fri Jan 24, 2020 3:46 pm    Post subject: Reply with quote Back to top

I mentioned that these would be redone if I learned about the exact algorithms used for reverb.
I posted a lot of technical details already.
Here are the 2 primary sets with these balance issues correctly handled.

https://www.youtube.com/playlist?list=PLWsnao9n727OrLod3kmWZWrj6tl7IQiO- Perfect Dark
https://www.youtube.com/playlist?list=PLWsnao9n727PT17V5AzCkZYEQqeuVm01E GoldenEye 007

I have marked the sets that correctly replicate the dry->wet balance as HD (Pilotwings 64 also has this although I did not mark it as HD).
Everything marked as HD is completely final. There are no further reasons for me to re-record these OST's.
I have gotten many complaints about the sounds of Runway X, Dam X, and Silo X. Here they are, finally correct, exactly as they are in the games but in HD, crisp and clear.

WAV downloads (44,100Hz, 24 bits) are in the playlist descriptions.
Each file comes with Songs.txt which has the exact loop lengths if you want to manually create longer recordings (does not work perfectly on songs with multiple loop points such as Jungle, but perhaps close enough).

Enjoy!


L. Spiro
 
View user's profile Send private message
NutShot
Agent
Agent


Joined: 19 Nov 2017
Posts: 55

 PostPosted: Sun Jan 26, 2020 12:02 pm    Post subject: Reply with quote Back to top

Thank you, Spiro!!!
I will have a listen tomorrow.
I´m excited how this will sound as it seems this is the final, real final final ... final Version, am i correct? Very Happy
It must be the best thing you can get out of the Soundtracks. So excited!!!

Edit:
Hmmmmmm......
So all the ones with "HD" on the end are the final ones?
I remember i asked about this before, but can´t remember now your answer, sorry. So i have to ask again because i immediatly listened to the track to hear it. I´m talking about Killer Instinct:
https://www.youtube.com/watch?v=EBwZNg_ZXyE&list=PLWsnao9n727N6eMJQCouQ-UpAx3DlzpT0&index=4&t=0s
And it still switches to Mono on the 0:11 Seconds Mark. Can you please explain me why this happens because i forgot it?
 
View user's profile Send private message
L. Spiro
Agent
Agent


Joined: 27 Feb 2009
Posts: 116
Location: Cupertino, CA

 PostPosted: Mon Jan 27, 2020 1:17 pm    Post subject: Reply with quote Back to top

The answer is simple: Because that is what the game does.
https://downloads.khinsider.com/game-soundtracks/album/killer-instinct-1-2-the-complete-soundtrack/2-16%2520Character%2520Select%2520N64.mp3

There are many recordings on YouTube where it stays stereo, but these are likely edited.
As an example of this type of editing listen to Surface I in GoldenEye 007.
First, listen to the bass from 1:20:
https://youtu.be/HZ0aHBTaZto?list=PLWsnao9n727PT17V5AzCkZYEQqeuVm01E&t=80

It sounds like:
---<DOO>
------------<DOOO>
--------------------------<WOMP>-<WOMP>

There are 2 bass tracks.
Now listen to that same section on the second loop:
https://youtu.be/HZ0aHBTaZto?list=PLWsnao9n727PT17V5AzCkZYEQqeuVm01E&t=283
Now it sounds like:
---<DOO>
------------<DOOO>
--------------------------<warble>-<warble>

Before the 2nd loop, the 2nd bass track goes into 126 reverb and Pan=1 (full left).
Since the reverb is mono, and that is almost all you hear, you can't hear the left panning much.

This is correct. This is what the game actually does (I confirmed it in the game). In the words of Graeme Norgate, "Those were the the last songs I did and I was looking for ways to keep things interesting."

Now listen to the popular YouTube version: https://youtu.be/sDHzzasg3Dg
The bass doesn't change on the 2nd loop, meaning they just copied the first loop over and over.

It is not as uncommon as you would think to have the 1st and 2nd loops slightly different, but my guess is that most people who put together their OST's either copy the first loop over and over (possibly literally just copying the WAV samples), or they, like you, can't believe their ears and think it is a bug, so they edit their USF (or whatever) data.

This is actually the whole reason all of my recordings loop twice before fading out.



Also, the HD sets are final. Individual songs could be re-uploaded if a bug is found.
This is why dataDyne Central: Defection was re-uploaded. You wouldn't be able to hear the previous bug, as the difference was absolutely minuscule, but bugs = re-upload, no matter how tiny.
Also enjoy the CD version of dataDyne Central: Defection!
https://www.youtube.com/watch?v=u-83gJUMvZs&list=PLWsnao9n727OrLod3kmWZWrj6tl7IQiO-&index=9&t=0s

Why is the CD release different from the in-game one?
After Graeme Norgate left Rare, Grant Kirkhope made a series of changes to that song.
Then they made their CD recordings.
And then Grant made 1 final change to that song, swapping a single instrument for the in-game version.

My release is the only one with both versions in 44,100Hz and 24-bits, so enjoy!


L. Spiro
 
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    ShootersForever.com Forum Index -> GoldenEye 007 All times are GMT - 8 Hours
Goto page Previous  1, 2, 3, 4, 5, 6, 7  Next
Page 5 of 7

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

Cobalt 2.0 BB theme/template by Jakob Persson.
Copyright 2002-2004 Jakob Persson


Powered by BB 01, 02 BB Group

 


Please Visit My Other Sites: GoldenEyeForever.com | GrandTheftAutoForever.com

Got kids? Check out my Dora The Explorer site with games and coloring pages!

Our forums feature Nintendo 64 games, GoldenEye 007 N64 New Maps and Missions, GoldenEye Cheats, N64 Emulator, Gameshark, GoldenEye Multiplayer and more!

[ Privacy Policy ]