File size: 2,442 Bytes
2298c8c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import datetime
import time
import tempfile
import os
import scipy
import torch
import numpy as np
import json
class AudioLogger():
    def __init__(self, log_file='temp/audio_log.txt'):
        self.log_file = log_file
        self.history = []
        self.conversational_history = []

    def save_audio_to_local(self, audio, sec):
      if isinstance(audio, torch.Tensor):
        audio = audio.cpu().numpy()
      if isinstance(audio, list):
        audio = np.asarray(audio)
      sampling_rate = 32000
      if len(audio) > 0:
        if not os.path.exists('temp'):
            os.mkdir('temp')
        filename = os.path.join('temp', next(tempfile._get_candidate_names()) + '.wav')
        scipy.io.wavfile.write(filename, rate=sampling_rate, data=audio)
        return filename


    def log_audio(self, task, audio, duration, prompt, generation_flag, music_caption,play_steps_in_s,extend_stride, seed, top_p = 0.8, top_k = 50, temperature = 0.8,do_sample=True, guidance_scale=3, context_audio_path=None):
        filename = self.save_audio_to_local(audio, duration)
        audio_gen_args = {
            "play_steps_in_s": play_steps_in_s,
            "extend_stride": extend_stride,
            "top_p": top_p,
            "top_k": top_k,
            "temperature": temperature,
            "seed": seed,
            "do_sample": do_sample,
            "guidance_scale": guidance_scale,
        }
        log_entry = {
            "task": task,
            "audio_path": filename,
            "prompt": prompt, # user input prompt. if generation flag is false then this prompt was used to generate the music. If generation flag is true then this prompt was sent to M2UGen and the music was generated using the music caption
            "generation_flag": generation_flag,
            "music_caption": music_caption,
            "audio_gen_args": audio_gen_args,
            "duration": duration,
            "context_audio_path": context_audio_path,
            "timestamp": datetime.datetime.now().isoformat()
        }

        # Append to history
        self.history.append(log_entry)

        # Append log entry to file
        with open(self.log_file, 'a') as f:
            f.write(json.dumps(log_entry) + '\n')
        print(f'Log entry added for {filename}')

    def get_last_log(self):
      for log_entry in reversed(self.history):
          if log_entry["audio_path"]:
              return log_entry
      return None