What do you think? People could collaborate on projects without having to mail them, download, upload and wait. Simultaneous editing. Just a thought.
This is quite an interesting question.
The problem is not Audacity, the problem is managing the data.
Audacity projects are typically large, with thousands of data files. To work reliably over a network, the data would need to verified and any errors corrected. While it is acceptable for some types of data (such as streamed video or voip) to occasionally drop packets, that is not acceptable for Audacity as a single dropped packet could corrupt the project.
Audacity requires fast access to the project data - too fast to work reliably over a network. Audacity would therefore need to maintain a local copy of the data, which is synchronised with the remote version. For “real time”, or close to real time collaboration, the network would need to be fast enough to not only handle the large amount of data, but also to verify and error correct as necessary, and handle data collisions (see the next point).
What happens if you and I are working on the same project, and we both modify the same part of the same track at the same time? This would cause a “version conflict”. The system would need some way of handling version conflicts. Another type of version conflict could occur - if both you and I are recording into the same project at the same time, what happens if I create an audio data block (a “.au” file) that has the same name as one that you are creating? This is a “data collision”, and the data management system would need a reliable way to handle that so that my version of the file goes into the track that I am recording, and your version of the file goes into the track that you are recording.
True (asynchronous) “real time” collaboration of an Audacity project is probably not possible with today’s technology. It is possible to work collaboratively if you use a data management system that is able to handle version conflicts, but not quite in “real time”.
One example of how you could work collaboratively, is to use a “distributed version-control system” such as Git.
How this would work if you and I were working on the same project:
Either you or I would create the initial project and upload it to a “Git Repository” (such as GitHub).
The other person would then “clone” the repository to their local computer. We now both have identical copies of the same project.
We can then both work on the project, and periodically “commit” our changes to the repository.
When making a commit, Git first checks that our local copy is up to date with the remote copy. If not up to date, we would have to “fetch” the latest version from the repository and “merge” it with our local copy. Git is clever about this - we don’t need to download the entire project, we only need to “fetch” the difference between the remote version and the local version. By merging the difference, our local version then becomes an exact copy of the remote, and we can then apply our local changes on top of that updated version. When there are conflicts, Git will try to resolve the conflicts automatically, but if that is not possible, then we would need to resolve the conflict manually (for example, we could just undo our local change and redo the change after updating).
Is it possibe now to do this?
Also why not sending just the instruction and let the host machine apply the changes. (Implies adding background and non blocking modifications support)
Also why do you say sending data would be unreilable?
Would’t it be the same as uploading a file?
That could be done (see “Scripting”: Scripting - Audacity Manual and note the “Caveats and Warnings”)
but if you want to record or import, then you need to send the audio data.
Because for recording you need to send a huge number of packets of data in real-time in the correct order. A lot of people have difficulty just recording to a local drive without drop-outs, without the complications of traversing a network.
Can’t you just work around this by sending only the length of the recording so that the remote machine can add a placeholder and then after the host machine finishes recording, send it through TCP?
Feel free to play with Scripting, but for safety,pay attention to the “Caveats and Warnings”.