mirror of
https://github.com/d-fi/d-fi-core.git
synced 2025-07-24 22:25:12 +02:00
auto detect flac
This commit is contained in:
parent
4c121855d5
commit
8d9ad90a3f
10
README.md
10
README.md
@ -33,7 +33,7 @@ const {data} = await axios.get(url, {responseType: 'arraybuffer'});
|
||||
const decryptedTrack = api.decryptDownload(data, track.SNG_ID);
|
||||
|
||||
// Add id3 metadata
|
||||
const trackWithMetadata = await api.addTrackTags(decryptedTrack, track, false, 500);
|
||||
const trackWithMetadata = await api.addTrackTags(decryptedTrack, track, 500);
|
||||
|
||||
// Save file to disk
|
||||
fs.writeFileSync(track.SNG_TITLE + '.mp3', trackWithMetadata);
|
||||
@ -137,6 +137,14 @@ All method returns `Object` or throws `Error`. Make sure to catch error on your
|
||||
| `data` | Yes | `buffer` | downloaded song buffer |
|
||||
| `song_id` | Yes | `string` | track id |
|
||||
|
||||
### `.addTrackTags(data, track,coverSize)`
|
||||
|
||||
| Parameters | Required | Type | Description |
|
||||
| ----------- | :------: | --------: | ---------------------: |
|
||||
| `data` | Yes | `buffer` | downloaded song buffer |
|
||||
| `track` | Yes | `string` | track object |
|
||||
| `coverSize` | No | `56-1800` | cover art size |
|
||||
|
||||
### Donations
|
||||
|
||||
If you want to show your appreciation, you can donate me on [ko-fi](https://ko-fi.com/Z8Z5KDA6) or [buy me a coffee](https://www.buymeacoffee.com/sayem). Thanks!
|
||||
|
@ -69,7 +69,7 @@ class Metaflac {
|
||||
}
|
||||
|
||||
init() {
|
||||
let offset = 0;
|
||||
let offset = 4;
|
||||
let blockType = 0;
|
||||
let isLastBlock = false;
|
||||
while (!isLastBlock) {
|
||||
|
@ -9,21 +9,16 @@ import type {trackType} from '../types';
|
||||
* Add metdata to the mp3
|
||||
* @param {Buffer} trackBuffer decrypted track buffer
|
||||
* @param {Object} track json containing track infos
|
||||
* @param {Boolean} fileType buffer type, mp3 or flac
|
||||
* @param {Number} albumCoverSize album cover size in pixel
|
||||
*/
|
||||
export const addTrackTags = async (
|
||||
trackBuffer: Buffer,
|
||||
track: trackType,
|
||||
isFlac: boolean,
|
||||
albumCoverSize = 1000,
|
||||
): Promise<Buffer> => {
|
||||
export const addTrackTags = async (trackBuffer: Buffer, track: trackType, albumCoverSize = 1000): Promise<Buffer> => {
|
||||
const [cover, lyrics] = await Promise.all([downloadAlbumCover(track, albumCoverSize), getTrackLyrics(track)]);
|
||||
|
||||
if (lyrics) {
|
||||
track.LYRICS = lyrics;
|
||||
}
|
||||
|
||||
const isFlac = trackBuffer.slice(0, 4).toString('ascii') === 'fLaC';
|
||||
return isFlac
|
||||
? writeMetadataFlac(trackBuffer, track, albumCoverSize, cover)
|
||||
: writeMetadataMp3(trackBuffer, track, cover);
|
||||
|
@ -121,7 +121,7 @@ test('SEARCH TRACK, ALBUM & ARTIST', async (t) => {
|
||||
});
|
||||
|
||||
if (process.env.CI) {
|
||||
test('DOWNLOAD TRACK & ADD METADATA', async (t) => {
|
||||
test('DOWNLOAD TRACK128 & ADD METADATA', async (t) => {
|
||||
const track = await api.getTrackInfo(SNG_ID);
|
||||
const url = getTrackDownloadUrl(track, 1);
|
||||
const {data} = await axios.get(url, {responseType: 'arraybuffer'});
|
||||
@ -132,22 +132,46 @@ if (process.env.CI) {
|
||||
|
||||
const decryptedTrack = decryptDownload(data, track.SNG_ID);
|
||||
t.true(Buffer.isBuffer(decryptedTrack));
|
||||
t.is(data.length, 3596119);
|
||||
t.is(decryptedTrack.length, 3596119);
|
||||
|
||||
const trackWithMetadata = await api.addTrackTags(decryptedTrack, track, false, 500);
|
||||
const trackWithMetadata = await api.addTrackTags(decryptedTrack, track, 500);
|
||||
t.true(Buffer.isBuffer(trackWithMetadata));
|
||||
t.is(trackWithMetadata.length, 3628837);
|
||||
});
|
||||
|
||||
test('DOWNLOAD 320kbps & FLAC', async (t) => {
|
||||
test('DOWNLOAD TRACK320 & ADD METADATA', async (t) => {
|
||||
const track = await api.getTrackInfo(SNG_ID);
|
||||
const url = getTrackDownloadUrl(track, 3);
|
||||
const {data} = await axios.get(url, {responseType: 'arraybuffer'});
|
||||
|
||||
const format320 = await axios.get(getTrackDownloadUrl(track, 3), {responseType: 'arraybuffer'});
|
||||
t.truthy(format320.data);
|
||||
t.true(Buffer.isBuffer(format320.data));
|
||||
t.truthy(data);
|
||||
t.true(Buffer.isBuffer(data));
|
||||
t.is(data.length, 8990301);
|
||||
|
||||
const format9 = await axios.get(getTrackDownloadUrl(track, 9), {responseType: 'arraybuffer'});
|
||||
t.truthy(format9.data);
|
||||
t.true(Buffer.isBuffer(format9.data));
|
||||
const decryptedTrack = decryptDownload(data, track.SNG_ID);
|
||||
t.true(Buffer.isBuffer(decryptedTrack));
|
||||
t.is(decryptedTrack.length, 8990301);
|
||||
|
||||
const trackWithMetadata = await api.addTrackTags(decryptedTrack, track, 500);
|
||||
t.true(Buffer.isBuffer(trackWithMetadata));
|
||||
t.is(trackWithMetadata.length, 9023019);
|
||||
});
|
||||
|
||||
test('DOWNLOAD TRACK1411 & ADD METADATA', async (t) => {
|
||||
const track = await api.getTrackInfo(SNG_ID);
|
||||
const url = getTrackDownloadUrl(track, 9);
|
||||
const {data} = await axios.get(url, {responseType: 'arraybuffer'});
|
||||
|
||||
t.truthy(data);
|
||||
t.true(Buffer.isBuffer(data));
|
||||
t.is(data.length, 25418289);
|
||||
|
||||
const decryptedTrack = decryptDownload(data, track.SNG_ID);
|
||||
t.true(Buffer.isBuffer(decryptedTrack));
|
||||
t.is(data.length, 25418289);
|
||||
|
||||
const trackWithMetadata = await api.addTrackTags(decryptedTrack, track, 500);
|
||||
t.true(Buffer.isBuffer(trackWithMetadata));
|
||||
t.is(trackWithMetadata.length, 25453167);
|
||||
});
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user