Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Read multiple MIDI files from stream #244

Closed
ZengRunMing opened this issue Mar 25, 2023 · 17 comments
Closed

Read multiple MIDI files from stream #244

ZengRunMing opened this issue Mar 25, 2023 · 17 comments
Labels
feature request API changes required in-prerelease API changes are in prerelease package for the milestone
Milestone

Comments

@ZengRunMing
Copy link

因为要将多个Midi文件的数据打包成一个文件,所以希望能够添加通过虚拟内存加载写入到MenoryStream中的Midi数据的功能

下面是根据反编译后自己添加的代码,但还没测试是否可行
A

@melanchall
Copy link
Owner

Hi,

Unfortunately, I don't understand you :-( Can you please write your question in English?

Thanks,
Max

@melanchall
Copy link
Owner

melanchall commented Mar 26, 2023

@ZengRunMing Am I correct you have a feature suggestion to introduce a new Read method which accepts an offset from the start of a stream? Something like

MidiFile.Read(stream, offset);

I don't think we need the size parameter because it's not required to detect the end of a file.

@melanchall melanchall added the question Just question about the library label Mar 31, 2023
@melanchall
Copy link
Owner

Well, if I understood you correctly, I think we don't need a new method. Just move to the desired position in the stream first

stream.Seek(count, from);

and then call

MidiFile.Read(stream);

@ZengRunMing
Copy link
Author

It has been resolved, thank you

@ZengRunMing
Copy link
Author

Next time, I will use a translator to send English because I am not very good at speaking English.
This is written using a translator

@melanchall
Copy link
Owner

Well, I've just checked the way suggested by me and it doesn't work... So I need to handle your issue properly. I think I'll add

ExtraTrackChunkPolicy.StopReading

which can be specified in ReadingSettings which will tell DryWetMIDI to stop reading a file when required track chunks are read.

Thanks for the issue! I'll implement new policy as soon as I get back to my computer next week.

@melanchall melanchall added feature request API changes required and removed question Just question about the library labels Apr 5, 2023
@melanchall melanchall added this to the 7.0.0 milestone Apr 5, 2023
@melanchall melanchall changed the title 另一种Midi文件加载方式的添加请求 Read multiple MIDI files from stream Apr 5, 2023
@melanchall
Copy link
Owner

@ZengRunMing Hi,

I've added StopReadingOnExpectedTrackChunksCountReached property to the ReadingSettings, so you can use this code:

MidiFile.Read(stream, new ReadingSettings
{
    StopReadingOnExpectedTrackChunksCountReached = true
});

This will force DryWetMIDI to stop when a file is read even if the input stream's end is not reached. So you can make the same call again and read following file from the stream.

New API is in prerelease NuGet-package – 7.0.0-prerelease1.

Thanks,
Max

@melanchall melanchall added the in-prerelease API changes are in prerelease package for the milestone label Apr 25, 2023
@ZengRunMing
Copy link
Author

midi.zip
By the way, I also discovered an issue where errors may occur when playing Midi files similar to those in compressed packages, as follows
Error

@melanchall
Copy link
Owner

@ZengRunMing Please show the code you use to get this error. In the archive I see 4 files, but I suppose you get the error on one specific file, right?

@ZengRunMing
Copy link
Author

Are these?
Error
ErrorCode

@ZengRunMing
Copy link
Author

This problem arose before I changed the API, when I read Midi files directly from Read (string Path)

@melanchall
Copy link
Owner

What is ReadOnBytes? Where usage of the new API I've provided you via prerelease package? What is in MemoryStream? How your archive is related with this code? You didn't provide any details so I can't help you unfortunately.

@ZengRunMing
Copy link
Author

This is the API version 6.4.1. There is currently no newly released API being used. The above code is used to call the method I added in the API after I changed it. The following figure shows the code added in the API. The Midi file in the ZIP file is imported through Cubase and then re exported. Only in this way can it run normally. I'm not sure if it's a coding issue. This issue also occurs when reading using file names.
CODE

@melanchall
Copy link
Owner

Please send me the entire solution with all your code and hardcode usage of some file within it so I can just run solution and reproduce the error.

@ZengRunMing
Copy link
Author

The file was too big to be sent out

@melanchall
Copy link
Owner

Unfortunately you didn't provide me details and I am forced to pull information from you. Sorry, but I have no time for this. So I recommend you to use new API I've prepared for you. If you have any other questions or problems, feel free to open new issues. And please read the Support article to learn how to get help quickly.

@melanchall
Copy link
Owner

🚀 7.0.0 version is released now!

Prerelease NuGet packages will be unlisted soon, so please update the package references to the new version.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature request API changes required in-prerelease API changes are in prerelease package for the milestone
Projects
None yet
Development

No branches or pull requests

2 participants