Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django-临时midi文件music21_Django_Ajax_Midi_Temporary Files_Music21 - Fatal编程技术网

Django-临时midi文件music21

Django-临时midi文件music21,django,ajax,midi,temporary-files,music21,Django,Ajax,Midi,Temporary Files,Music21,很抱歉,如果我做得不对,我是web应用程序开发新手,我一直在与Django合作一个项目,我希望我能做到以下几点: 当用户单击按钮时,会生成一个Ajax请求(我使用的是纯Javascript) 该请求向服务器(Django)发送一些音符,该服务器生成旋律 # Generate the melody based on the seed @require_http_methods(["POST"]) def generate(request): # See if method w

很抱歉,如果我做得不对,我是web应用程序开发新手,我一直在与Django合作一个项目,我希望我能做到以下几点:

当用户单击按钮时,会生成一个Ajax请求(我使用的是纯Javascript)

该请求向服务器(Django)发送一些音符,该服务器生成旋律

# Generate the melody based on the seed
@require_http_methods(["POST"])
def generate(request):

# See if method was post
if request.method == "POST":
    # Get the seed and other stuff...

    # Create a melody generator
    mg = MelodyGenerator()

    melody = mg.generate_melody(encoded_seed, ...)

    mg.save_melody(melody)

    # Return the melody 
    return JsonResponse({"melody": melody}, status=200)
服务器将旋律保存在一个midi文件中,我希望它是一个临时文件

class MelodyGenerator:
# ... do some stuff

    def save_melody(...):
        path_dir = os.path.join(settings.MEDIA_ROOT, "temp_midis")
        file_path = os.path.join(path_dir, file_name)
        midi = stream.write(format, file_path)
因此,用户可以收听midi(html模板):


我希望这个文件是临时的,这样它就不会占用空间,也就是说,用户可以听旋律,可以选择下载等等,但是当他们离开页面时,文件会被删除,因此不会占用更多空间


我如何知道这个文件的url,我希望它是临时的?

服务器应该动态生成并输出MIDI文件,例如,
url/path/to/generate.mid?notes=1,2,3
Hi@CL。感谢您的回答。。。我不完全理解你的解释,我在问题中添加了更多细节,而不是返回JSON响应,而是返回MIDI文件本身。谢谢@CL。仍然不知道如何做,但我将检查你的建议。。。我真的很感激任何其他方向如何实现这一点。我的问题还在于我不知道如何在不保存的情况下在music21中创建midi文件,如果我正确理解了您的注释而不是
write()
,请使用和
writestr()
class MelodyGenerator:
# ... do some stuff

    def save_melody(...):
        path_dir = os.path.join(settings.MEDIA_ROOT, "temp_midis")
        file_path = os.path.join(path_dir, file_name)
        midi = stream.write(format, file_path)
<midi-player
   src = "url/path/to/temporaryfile"
   sound-font visualizer = "#myVisualizer">
</midi-player>
<midi-visualizer type = "staff" id = "myVisualizer"> </midi-visualizer>